java登录验证(session机制)

本文详细阐述了如何通过Spring Boot实现登录接口,使用BCryptPasswordEncoder进行密码校验,并利用session进行用户身份标识。同时介绍了前端验证和后端拦截器如何确保用户登录状态。
摘要由CSDN通过智能技术生成

登录接口:

验证用户名密码正确之后设置session,作为判断该用户是否登录的标识,这个标识在拦截器或过滤器中起作用,也可在用户登录后的一些操作中取到用户信息

@RequestMapping("login")
    @ResponseBody
    public ResultJson login(String username,String password) {
        Site site = frontUtils.loadSite();
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        Member member = new Member();
        member.setUsername(username);
        Member person = memberService.getMember(member);
        if(person!=null&&passwordEncoder.matches(password,person.getPassword())){
            httpSession.setAttribute(FrontConfig.FONT_SESSION, person);
            //验证通过后台设置session
            return ResultJson.ok(person);

        }
        else{
            return ResultJson.failure(ResultCode.LOGIN_ERROR);
        }
    }

    @RequestMapping("logout")
    public String Logout(Model model) {
        //用户登出后将session置空
        httpSession.removeAttribute(FrontConfig.FONT_SESSION);
        return "redirect:/";
    }
public class FrontAuthFilter implements Filter {
    private Logger log =  LoggerFactory.getLogger(FrontAuthFilter.class);
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session  = request.getSession();
        Member member = (Member) session.getAttribute(FrontConfig.FONT_SESSION);
        if(member == null){
            //用户想要访问的路径
            String url = request.getRequestURI();
            //设置session值
            session.setAttribute(FrontConfig.FONT_FRIST_URL, url);
            //用户未登录-跳转到登录页面
            response.sendRedirect("/front/login");
        } else {
            //用户已经登录-允许访问其他资源
            chain.doFilter(request, response);
        }
    }
    @Override
    public void destroy() {
    }
}

js:

function getLogin() {
        var obj = {};
        obj.username = $('#identity').val();
        obj.password = $('#desStr').val();
        $.ajax({
            type: "POST",
            url: "front/login",
            data: obj,
            success: function (result) {
                if (result.code == 200) {
                    location.href = "peoples.whtml"
                }
                else{
                    message(result.msg);
                }
            }
        });
    }

前台用户的一切请求都要先经过过滤器,如果session存在证明用户已经登陆了,否则未登录,要登录用户密码。

其实整个流程很清晰简单

拦截器相关代码实现

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值