Spring Session REST の例を試してみて、次のフローを作成できるかどうかに興味があります。 1. 最初に、ユーザーは資格情報、ユーザー名、およびパスワードを渡します。2. Spring Session はトークンを生成し、それを Redis 3 に入れます。次にユーザーがいくつかのリソースを要求すると、そのトークンが渡されます。私の問題は、次のコードがハードコードされ
code
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
}
ていることです。前もって感謝します。
1 に答える
Spring Session は、選択したセキュリティ フレームワークとは無関係に機能するため、答えは使用するセキュリティ フレームワークによって異なります。これは、ユーザーのユーザー名/パスワードの選択が、Spring Session から完全に独立していることを意味します。
質問は Spring Session とは無関係であるため、選択したセキュリティ フレームワークのドキュメントを参照する必要があります。この例では、Spring Security であるため、認証に関する Spring Security のドキュメントを参照できます。
最初のステップは、認証方法を決定することです。
たとえば、JDBC 認証を使用する場合は、次のようなものを使用できます。
@Autowired
private DataSource dataSource;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.jdbcAuthentication()
.dataSource(dataSource)
.withDefaultSchema()
.withUser("user").password("password").roles("USER").and()
.withUser("admin").password("password").roles("USER", "ADMIN");
}
デフォルトでjdbcAuthentication
は、次のことが期待されます。
select username, password, enabled from users where username = ?
ユーザー名、パスワード、およびそのユーザーが有効かどうかを返します。jdbcAuthentication() でプロパティを使用したい場合は、このクエリをカスタマイズできます。詳細については、javadoc を参照してください。
注: と は、スキーマとユーザーを毎回追加しようとするため、実際にはインメモリ データベースのみを対象としているwithDefaultSchema
ことを理解することが重要です。withUser
本番環境では、ユーザーとスキーマは他のメカニズム (つまり、 liquibase ) を使用して追加する必要があります。
最も柔軟なオプションは、UserDetailsService
. その後、任意の方法でユーザーを検索できます。例えば:
@Service
public class UserRepositoryUserDetailsService implements UserDetailsService {
private final UserRepository userRepository;
@Autowired
public UserRepositoryUserDetailsService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
MyUser user = userRepository.findByEmail(username);
if(user == null) {
throw new UsernameNotFoundException("Could not find user " + username);
}
List<GrantedAuthority> authorities = convert(user.getRoles());
return new User(user.getUsername(), user.getPassword(), authorities);
}
}
次に、次を使用して構成できます。
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth, UserDetailsService userDetailsService) throws Exception {
auth
.userDetailsService(userDetailsService);
}
私のSpring Security 4 talkで、 UserDetailsService を使用する完全な例を見つけることができます。