SpringBoot 注册自定义 过滤器、拦截器、监听器... 等组件到容器的两种方式(springboot2.x)

模拟场景:一个网站有登录界面、后台界面,但是用户不登录就可以通过URL访问后台页面(我们是想让用户登录后才能访问后台页面),这样子我们就可以通过拦截器来实现对未登录用户的拦截。

拦截器准备

先自定义一个拦截器类,实现HandlerInterceptor接口;

(该接口有三个方法作用分别是、请求controller前处理,请求controller后处理、veiw视图渲染后处理)

//拦截没有登录就直接访问后台页面的用户
public class LoginHandlerInterceptor implements HandlerInterceptor {
    
    @Override//重写请求controller前处理的方法
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object username =  request.getSession().getAttribute("username");
        if (username!=null){
            //已登录用户放行
            return true;
        }
        //非登录用户拦截
        request.setAttribute("message","无权限访问!");
        return false;
    }
}
两种配置自定义拦截器的方法

必要条件: 自定义一个WebMvc配置类,实现 WebMvcConfigurer接口:

第一种(推荐用法方式):

// WebMvc的配置类
@Configuration
public class MyMcvConfig implements WebMvcConfigurer {

    @Override //将我们自定义的拦截器添加进来
    public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(
                //添加自定义的拦截器进来
                new LoginHandlerInterceptor())
                //拦截指定的URL
                .addPathPatterns("/login");
    }
    
    @Override//我们可以重写 addViewControllers 方法对URL的请求转发
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("login");
        registry.addViewController("/index").setViewName("login");
        registry.addViewController("/main.html").setViewName("dashboard");
    }
}

第二种(不推荐方式、2.x版本后官方已经不推荐使用了):

// WebMvc的配置类
@Configuration
public class MyMcvConfig implements WebMvcConfigurer {

    @Bean//注册到容器中
    public WebMvcConfigurerAdapter MyWebMvcConfigurerAdapter(){
        WebMvcConfigurerAdapter Adapter = new WebMvcConfigurerAdapter(){
  
            @Override //将我们自定义的拦截器添加进来
            public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(
                //添加自定义的拦截器进来
                new LoginHandlerInterceptor())
                //拦截指定的URL
                .addPathPatterns("/login");
            }
            
            @Override//我们可以重写 addViewControllers 方法对URL的请求转发
            public void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/").setViewName("login");
                registry.addViewController("/index").setViewName("login");
                registry.addViewController("/main.html").setViewName("dashboard");
            }
        };
        return Adapter;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值