spring boot 拦截器登录判断及跳转

本文介绍如何在Spring Boot项目中配置Thymeleaf模板引擎,实现页面渲染,并通过自定义拦截器进行登录状态检查。文章详细解释了依赖引入、模板配置、拦截器实现与注册、登录控制器设计及前端响应处理。

1.使用teymeleaf及属性

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.cache=false //禁止缓存,用于开发
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.encoding=UTF-8

2.拦截器(通过session的属性name判断是否登录,登录放行,未登录记下原来的后缀路径在preurl中,然后重定向到登录页面,就是域名了,request.getRequestURL()完整路径,request.getRequestURI()后缀路径,tempContextUrl是域名,response.sendRedirect()重定向

public class Interceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception{
        HttpSession session=request.getSession();
        Object ob=session.getAttribute("name");
        if (ob!=null) {
            return true;
        }
        session.setAttribute("preurl",request.getRequestURI());
        StringBuffer url = request.getRequestURL();
        String tempContextUrl = url.delete(url.length() - request.getRequestURI().length(), url.length()).append(request.getServletContext().getContextPath()).append("/").toString();
        response.sendRedirect(tempContextUrl);
        return false;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler,ModelAndView model) throws Exception{
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                            Object handler,Exception ex) throws Exception{
    }
}

3.注册拦截器(拦截所有路径,除了/login和静态资源和注册)

@SpringBootApplication
@EnableCaching
public class Application implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        InterceptorRegistration ir=registry.addInterceptor(new Interceptor1());
        ir.addPathPatterns("/**");
        ir.excludePathPatterns("/login","/js/**","/html/**","/image/**","/css/**");
    }
}

4登录controller(我这里没验证,返回原来路径或者ok)

@RequestMapping("/login")
@ResponseBody
public String bbb(String name, String password, HttpSession session){
    session.setMaxInactiveInterval(1*60);  //设置过期时间以秒为单位,会自动刷新
    System.err.println(name+' '+password);
    session.setAttribute("name",name);
    session.setAttribute("password",password);
    Object ob=session.getAttribute("preurl");
    if (ob!=null) {
        return ob.toString();
    }
    return "ok";
}

5前端处理(根据data跳转到对应的路径)

$.post("/login",
       {
           name:$("#a").val(),
           password:$("#b").val()
       },
       function(data){
           if (data!='ok') {
               window.location.href = 'http://' + location.host + data;
           }
           else window.location.href = 'http://' + location.host + '/main';
       }
)

6.要使用默认登录页必须引入thymeleaf。index.html放在templates下。templates下的不能直接访问,要通过Controller。static下的可以直接访问,templates下的文件默认src地址为/static。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值