springboot中使用session进行登录验证

当我们想登录一次之后,在一定时间内可以不用再次登录就能访问一些界面,那么这个时候,我们便可以在用户第一次登陆的时候对用户名(唯一)进行存贮到服务器的session当中,下次访问时,便可以对session中的用户名进行判断,看是否有存在该用户,如果存在,就不拦截,如果不存在,就进行重定向到登录界面

第一步,先添加拦截器

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
/**
 * 添加拦截器
 */
public class SessionConfiguration extends WebMvcConfigurerAdapter{
    @Override
    public void addInterceptors(InterceptorRegistry registry ){
        registry.addInterceptor(new SessionInterceptor()).addPathPatterns("/");
        //网站配置生成器:添加一个拦截器,拦截路径为整个项目
    }
}

第二步,对一些路径进行放行,比如登录接口,首页接口

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 对某些接口进行放行
 */
public class SessionInterceptor implements HandlerInterceptor {
    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
    }
    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
    }
    @Override
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
        //首页路径以及登录放行
        if ("/index".equals(arg0.getRequestURI()) || "/loging".equals(arg0.getRequestURI())) {
            return true;}
        //重定向
        Object object = arg0.getSession().getAttribute("users");
        if (null == object) {
            arg1.sendRedirect("/loging");
            return false;}
        return true;
    }
}

登录控制层,当第一次验证成功之后,就把用户名存入该用户的session 中

@PostMapping(value = "/login")
public void login1(@RequestParam("userName") String username,@RequestParam("password") String password,HttpServletResponse response,HttpServletRequest request)throws Exception{
    String password1=manageMapper.selectPassword(username);
    response.setContentType("text/html;charset=utf-8");
    response.setCharacterEncoding("utf-8");
    PrintWriter out = response.getWriter();
    if(password1.equals(password)){
        request.getSession().setAttribute("users",username);//用户名存入该用户的session 中
        out.print("<script language=\"javascript\">alert('登录成功了');window.location.href='/notifications'</script>");
    }else
        out.print("<script language=\"javascript\">alert('账号密码错误');window.location.href='/loging'</script>");
}

这样,我们就可以短时间内进行免密登录了,可以在springboot中设置session的存活时间

猜你喜欢

转载自blog.csdn.net/abc_123456___/article/details/88790196
今日推荐