1

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"); } ていることです。前もって感謝します。

4

1 に答える 1

2

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で、 UserDetailsS​​ervice を使用する完全な例を見つけることができます。

于 2015-08-17T14:12:54.710 に答える