版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
当我们想登录一次之后,在一定时间内可以不用再次登录就能访问一些界面,那么这个时候,我们便可以在用户第一次登陆的时候对用户名(唯一)进行存贮到服务器的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的存活时间