当我们想登录一次之后,在一定时间内可以不用再次登录就能访问一些界面,那么这个时候,我们便可以在用户第一次登陆的时候对用户名(唯一)进行存贮到服务器的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的存活时间

本文介绍了一种基于Spring Boot实现的短期免密登录方案。通过在用户首次登录时将用户名保存到session中,并设置特定路径的放行规则,使得用户在一定时间内无需重新登录即可访问系统。同时介绍了如何配置拦截器及登录控制层的具体实现。
23万+

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



