SpringBoot - Web开发 拦截器

作者: BzCoder | 来源:发表于2018-05-16 22:09 被阅读71次

    在做网站的时候,很多页面希望用户在登录后才能访问,此时我们就要为我们的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,如果有大神知道原因所在并解答,那必万分感激!

    相关文章

      网友评论

      本文标题:SpringBoot - Web开发 拦截器

      本文链接:https://www.haomeiwen.com/subject/okzudftx.html