使用 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:简单的保护一个SpringBoot应用程序(总结)
Understand Spring Security Architecture and implement Spring Boot Security
为啥 https 中使用 Spring Security 添加端口 80?