Spring boot拦截器登录检查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nangeali/article/details/82470146

拦截器

进行登录检查
从登录页面跳转到成功页面之后

为了防止表单重复提交
配置视图映射,利用重定向到成功页面

此时,在浏览器直接输入,配置的视图映射地址
也可以直接映射、跳转到成功页面
登录页面,也就失去意义了

添加拦截器,进行登录检查
通过Session检查登录请求

没有登录的用户,不能访问后台主页
当登录成功之后,把用户信息存放到Session中

session.setAttribute("loginUser", username);

这里写图片描述
LoginHandlerInterceptor
自定义拦截器,必须HandlerInterceptor接口

在目标方法执行之前,获取Session
从Session中,获取用户登录信息

如果,已经登录,放行
如果,未登录,返回登录页面

public class LoginHandlerInterceptor implements HandlerInterceptor {
    //目标方法执行之前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object user = request.getSession().getAttribute("loginUser");
        if(user == null){
            //未登陆,返回登陆页面
            request.setAttribute("msg","没有权限请先登陆");
            request.getRequestDispatcher("/index.html").forward(request,response);
            return false;
        }else{
            //已登陆,放行请求
            return true;
        }

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

返回登录页面
获取转发器,转发请求到视图映射器,登录页面
request.getRequestDispatcher(“/index.html”).forward(request,response);
这里写图片描述
显示错误消息

request.setAttribute("msg","没有权限请先登陆");

注册拦截器

addInterceptors
拦截除了访问登录页面的所有请求

/**,表示任意路径下的任意请求
excludePathPatterns,表示排除哪些请求
这里写图片描述
静态资源
之前Spring MVC配置拦截器,需要排除静态资源的请求

Spring boot已经做好而来静态资源映射
不需要进行处理,静态资源也可以正常访问

//所有的WebMvcConfigurerAdapter组件都会一起起作用
@Bean //将组件注册在容器
public WebMvcConfigurerAdapter webMvcConfigurerAdapter() {
    WebMvcConfigurerAdapter adapter = new WebMvcConfigurerAdapter() {
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/").setViewName("login");
            registry.addViewController("/index.html").setViewName("login");
            registry.addViewController("/main.html").setViewName("dashboard");
        }

        //注册拦截器
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //super.addInterceptors(registry);
            //静态资源;  *.css , *.js
            //SpringBoot已经做好了静态资源映射
            registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
                    .excludePathPatterns("/index.html", "/", "/user/login");
        }
    };
    return adapter;
}
展开阅读全文

没有更多推荐了,返回首页