@Autowired
@Qualifier("authenticationManager") // bean id 在 <authentication-manager> 中设置
private AuthenticationManager authManager;
@Autowired
private SessionAuthenticationStrategy sessionStrategy;
@Autowired(required = false)
private RememberMeServices rememberMeServices;
@Autowired(required = false)
private ApplicationEventPublisher eventPublisher;
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(HttpServletRequest request, HttpServletResponse response) {
// 创建一个用户名密码登陆信息
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(request.getParameter("username"), request.getParameter("password"));
try {
// 用户名密码登陆效验
Authentication authResult = authManager.authenticate(token);
// 在 session 中保存 authResult
sessionStrategy.onAuthentication(authResult, request, response);
// 在当前访问线程中设置 authResult
SecurityContextHolder.getContext().setAuthentication(authResult);
// 如果记住我在配置文件中有配置
if (rememberMeServices != null) {
rememberMeServices.loginSuccess(request, response, authResult);
}
// 发布登陆成功事件
if (eventPublisher != null) {
eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(authResult, this.getClass()));
}
return "redirect:/index.jsp";
} catch (AuthenticationException e) {
// result.reject("authentication.exception", e.getLocalizedMessage());
}
return "/login.jsp?error";
}
纯属记录一个springsecurity 自定义登录
于 2022-06-09 14:14:51 首次发布
该博客详细介绍了如何使用 Spring Security 进行登录认证。通过 @Autowired 注解注入 AuthenticationManager、SessionAuthenticationStrategy 和 RememberMeServices 等组件,实现用户提交的用户名密码进行验证,并在认证成功后设置 SecurityContextHolder、处理 '记住我' 功能以及发布登录成功事件。当认证失败时,重定向到错误页面。
5869

被折叠的 条评论
为什么被折叠?



