在做网站的时候,很多页面希望用户在登录后才能访问,此时我们就要为我们的Web项目添加登录拦截器,拦截器其实是一种AOP编程思想的体现,这是在之前的安卓开发中接触比较少的一块内容。好,接下来看一下如何实现在SpringBoot中添加登录拦截器。
一.定义拦截器
/**
* 登录拦截器
* @author BaoZhou
* @date 2018/5/16
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String username = (String) request.getSession().getAttribute("username");
if (StringUtils.isEmpty(username)) {
request.setAttribute("msg", "请先登录");
request.getRequestDispatcher("/index").forward(request,response);
return false;
} else {
return true;
}
}
}
}
此拦截器的功能就是根据Session来中的username字段来判断用户是否登录。
二.配置拦截器
在Config文件中配置拦截器
/**
* 拦截器
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/", "/index", "/user/login");
}
这个配置的意思就是让这个拦截器在所有的页面生效除了(("/", "/index", "/user/login"))这三个路径。
三.运行
运行正确此时我们请求dashboard页面时,请求被拦截器截获,返回登录页面并提示消息。
但是中间还是碰到了一个坑反复研究没有解决。按照道理来说SpringBoot的自动配置让拦截器不会拦截静态资源,但是在登录界面中我们引入的本地Bootstrap却被拦截了。。。。。。。
<link th:href="@{/dist/css/bootstrap.min.css}" rel="stylesheet">``
Bootstrap被拦截,CSS无法获取
后将Bootstrap引入语句改为下面这句才通过。
<link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/4.4.1/css/bootstrap.min.css">
反复检查,资源存放路径也不存在问题。
静态资源路径
最后也没有找到具体原因,SpringBoot版本2.0.1.RELEASE,如果有大神知道原因所在并解答,那必万分感激!
网友评论