7

私のアプリケーションは Spring Security を使用しており、クライアントには以下が必要です。

  • ユーザーは、サインアップ後に自動的にログインできるようになります。
  • 管理者はパスワードを知らなくても任意のユーザーとしてログインできます。

そのため、パスワードを知らなくても任意のユーザーとして自動的にログインする方法を理解する必要があります。

Spring Security を使用してこれをどのように達成できますか?

4

3 に答える 3

7

これを機能させるには、次のことを行う必要がありました。

UserDetailsS​​ervice (jdbcUserService) への参照を構成する

<authentication-manager>
<authentication-provider>
<jdbc-user-service id="jdbcUserService" data-source-ref="dataSource"
  users-by-username-query="select username,password, enabled from users where username=?" 
  authorities-by-username-query="select u.username, ur.authority from users u, user_roles ur where u.user_id = ur.user_id and u.username =?  " 
/>
</authentication-provider>
</authentication-manager>

コントローラーで userDetailsManager を自動配線します。

@Autowired
@Qualifier("jdbcUserService")  // <-- this references the bean id
public UserDetailsManager userDetailsManager;

同じコントローラーで、次のようにユーザーを認証します。

@RequestMapping("/automatic/login/test")
public @ResponseBody String automaticLoginTest(HttpServletRequest request) 
{
    String username = "anyUserName@YourSite.com";

    Boolean result = authenticateUserAndInitializeSessionByUsername(username, userDetailsManager, request);

    return result.toString();
}

public boolean authenticateUserAndInitializeSessionByUsername(String username, UserDetailsManager userDetailsManager, HttpServletRequest request)
{
    boolean result = true;

    try
    {
        // generate session if one doesn't exist
        request.getSession();

        // Authenticate the user
        UserDetails user = userDetailsManager.loadUserByUsername(username);
        Authentication auth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
        SecurityContextHolder.getContext().setAuthentication(auth);
    }
    catch (Exception e)
    {
      System.out.println(e.getMessage());

      result = false;
    }

    return result;
}

アプリにSpring Securityを使用するだけの良い前兆がここにあることに注意してください

于 2012-08-21T14:39:38.220 に答える
1

2番目の問題

管理者はパスワードを知らなくても任意のユーザーとしてログインできます。

春のユーザー切り替え機能を使用する必要があります。javadoc記事

于 2012-08-21T15:03:13.733 に答える