2

資格情報として sql-db でユーザー名とパスワードの組み合わせを使用して、Spring-Security によって保護された小さな webapp を取得しました。

spring-social で facebook/twitter 認証を追加したいと思います。例を使用して、ユーザーの資格情報をデータベースに保存できます。現在、次のコードを使用して、アプリの現在のセッションに対してユーザーを認証する作業を行っています。

public String signIn(String userId, Connection<?> connection, NativeWebRequest request) {

    User user = userService.getUserById(Long.parseLong(userId));
    user.setPassword(this.passwordEncoder.encodePassword(user.getAccessToken(), this.salt));
    this.userService.store(user);

    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getDisplayName(), user.getAccessToken());

    HttpServletRequest req = request.getNativeRequest(HttpServletRequest.class); // generate session if one doesn't exist
    token.setDetails(new WebAuthenticationDetails(req));
    Authentication authenticatedUser = this.authenticationManager.authenticate(token);
    SecurityContextHolder.getContext().setAuthentication(authenticatedUser);

    return "/user/dashboard";
}

認証は機能します。BadCredential-exceptions は発生しません。しかし、/user/dashboard にリダイレクトされた後、ログインに戻されます。

セッションを認証するための同様のコードが、従来のサインアップ後に機能しています。

なぜこれが起こるのか、またはこれをデバッグする方法を知っている人はいますか?

よろしくお願いします!ヘンドリック

4

1 に答える 1

1

私には同様のコードがあり、「remember me」サポートも追加されています。

// lookup by id, which in my case is the login
User user = userService.findByLogin(userId);
// code to populate the user's roles
List<GrantedAuthority> authorities = ...;
// create new instance of my UserDetails implementation
UserDetailsImpl springSecurityUser = new UserDetailsImpl(user, authorities);
// create new Authentication using UserDetails instance, password, and roles
Authentication authentication = new UsernamePasswordAuthenticationToken(springSecurityUser, user.getPassword(), authorities);
// set the Authentication in the SecurityContext
SecurityContextHolder.getContext().setAuthentication(authentication);
// optional: remember-me support (must @Autowire in TokenBasedRememberMeServices)
tokenBasedRememberMeServices.onLoginSuccess(
    (HttpServletRequest) request.getNativeRequest(),
    (HttpServletResponse) request.getNativeResponse(),
    authentication);
于 2012-03-22T06:31:42.117 に答える