使用 Spring Security + Spring Session 将身份验证设置为 true

Posted

技术标签:

【中文标题】使用 Spring Security + Spring Session 将身份验证设置为 true【英文标题】:Setting authentication true with Spring Security + Spring Session 【发布时间】:2019-05-20 05:45:04 【问题描述】:

我有一个 Spring Security + Spring Session + Spring Boot 项目和一个带有自定义登录 POST 方法的控制器。我有自己的方法来验证客户的凭据。验证成功后,访问会话并将标识设置为 true 的最佳做法是什么?

我试过了,没有结果:

    @PostMapping("/login")
    public ResponseEntity loginSubmit(@RequestBody LoginForm form) 
        Errors errors = authenticationService.validateLoginForm(form);
        if (!errors.hasErrors()) 
            CustomerDTO result = authenticationService.findCustomerByEmailAndPassword(form);
            boolean success = (result != null && result.getId() != null);
            SecurityContextHolder.getContext().getAuthentication().setAuthenticated(success);
            return new ResponseEntity(result, HttpStatus.OK);
         else 
            return new ResponseEntity(errors.getAllErrors(), HttpStatus.OK);
        
    

我应该怎么做呢?

【问题讨论】:

【参考方案1】:

我建议不要编写自己的端点,而是通过实现自己的 org.springframework.security.authentication.AuthenticationProvider 来集成 Spring Security 框架

或者干脆这样做

public void login(HttpServletRequest req, String user, String pass)  
    UsernamePasswordAuthenticationToken authReqz = new UsernamePasswordAuthenticationToken(user, pass);
    Authentication auth = authManager.authenticate(authReq);

    SecurityContext sc = SecurityContextHolder.getContext();
    sc.setAuthentication(auth);
    HttpSession session = req.getSession(true);
    session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, sc);

详细解释可以看here

【讨论】:

以上是关于使用 Spring Security + Spring Session 将身份验证设置为 true的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 不显示错误消息

Spring Security:简单的保护一个SpringBoot应用程序(总结)

Understand Spring Security Architecture and implement Spring Boot Security

为啥 https 中使用 Spring Security 添加端口 80?

带有 grails 的 Spring Security 核心插件

springboot中使用spring security,登录url就出现403错误