纯属记录一个springsecurity 自定义登录

该博客详细介绍了如何使用 Spring Security 进行登录认证。通过 @Autowired 注解注入 AuthenticationManager、SessionAuthenticationStrategy 和 RememberMeServices 等组件,实现用户提交的用户名密码进行验证,并在认证成功后设置 SecurityContextHolder、处理 '记住我' 功能以及发布登录成功事件。当认证失败时,重定向到错误页面。

   @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";
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值