当前位置: 首页 > 知识库问答 >
问题:

Spring Security 3.1.1-定制登录成功问题

微生博简
2023-03-14

我是Spring Security的新手,我一直在阅读API和Javadocs,我相信我需要关于我的问题的帮助。

到目前为止,根据反复试验,我观察到的是抛出一个异常,提示authenticate方法自动重定向到登录失败处理程序。从那里,可以很容易地重定向和自定义失败身份验证的流程。然而,在成功登录时,除了HttpServletRequest、HttpServletResponse和身份验证对象之外,我似乎无法向登录成功处理程序传递任何信息。

我的登录成功有两种情况:

>

新用户登录应重定向到更改密码页面。

以下是一些问题:

>

  • 在这种情况下调用request.setParameter("status","FOR_CHANGE_PASSWORD")可以吗?安全吗?

    我应该添加“更改密码”权限吗?这是好的做法吗?

    我的问题是,我不想在我的LoginAuthenticator中调用userService方法,然后在我的Login Success处理程序中再次调用它,只是为了检索用户的状态。有什么解决办法吗?

    public class LoginAuthenticator implements AuthenticationProvider{
    private static final Logger log = LoggerFactory.getLogger(LoginAuthenticator.class);
    private static final List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>();
    @Autowired
    UserService userService;
    
    @Override
    public Authentication authenticate(Authentication authentication)
            throws AuthenticationException {
        log.info("Authenticating...");   
    
        log.debug("Username: {}" , authentication.getPrincipal());
        log.debug("Password: {}" , (String) authentication.getCredentials()); 
    
    
        WSResponse response = userService.authenticateLogin(username, password);
    
    
        //User log-in failure
        if(response.getResponseCode != 200){  
    
              if(response.getResponseStatus.equals("BAD CREDENTIALS")){
                 throw new BadCredentialsException("Bad Credentials");  
              }
              else{
                 throw new AccountStatusException("Account is locked")
              } 
        } 
        else{
            log.info("User credentials are valid... logging in");
            AUTHORITIES.add(new SimpleGrantedAuthority("USER"));
            return new UsernamePasswordAuthenticationToken(authentication.getPrincipal(),          (String) authentication.getCredentials(), AUTHORITIES);
    
        } 
    
    
    }
    

    任何更多的建议将是伟大的。

  • 共有1个答案

    蒋泰
    2023-03-14

    典型的方法是将有关登录用户的所有必要信息存储在其Authentication中。

    例如,标准的AuthenticationProviders,比如DaoAuthenticationProvider在成功的身份验证后,在构建Authentication对象时,将UserDetails的实现存储为主体,应用程序开发人员可以提供自己的UserDetails子类,其中包含必要的信息。你可以用同样的方式实现它。

     类似资料:
    • 我已经编写了一个php用户登录脚本,虽然我已经设法使注册页面正常工作(从而排除了common.php文件的内容是一个问题),并在mySQL中检查了数据库正在填充,但我似乎无法使登录本身发布任何内容,而不是不成功。 我肯定是在数据库中输入用户名和密码。有人能看出我哪里出了问题,或者建议我如何检查哪里出了问题吗? 表jmp_users的结构如下: 我的login.php页面是:

    • 我正在尝试使用MVC客户端设置IdentityServer4。 一切正常,直到我想添加ASP身份。当我添加代码以使用SQL server和Identity时,成功登录后,Identity server不会将我重定向回客户端,但它只是“刷新”页面。 IdentityServer应用程序启动: 在IdentityServer中配置 在MVC客户端中启动: 来自IdentityServer的日志: 我只

    • 下面是我的app.js代码,Login.js登录页面位于http://localhost:3000/Login,所以如果用户成功登录,我如何将用户重定向到http://localhost:3000/home page,它加载了“homeComponent.jsx”。为了简洁起见,我省略了“homeComponent.jsx”的代码

    • MvcConfig方法如下所示:

    • 我正在我是身份提供者的地方实施SSO,现在我能够成功登录到服务提供者。但它把我带到了主页。我想在发布响应时指定着陆页URL。搜索了很多,但找不到任何令人信服的东西。不太知道SAML响应的哪个元素携带着陆页URL或采用我必须指定的形式。使用java和opensaml库生成响应。

    • 我有一个spring boot应用程序,它包含spring security,其中添加了formLogin和自定义loginPage。每当我通过身份验证时,它会将我发送到defaultSuccessUrl,即/app/dashboard,它会与模式http一起发送。我一整天都在尝试将successUrl模式设置为https,只需对应用程序进行一些修改。属性,有时使用Bean,但我仍然无法实现。我的