spring boot拦截器 过滤器

1.拦截器

登录拦截

自定义拦截路径

//全局配置继承WebMvcConfigurer接口
@Configuration
public class MyHandler implements WebMvcConfigurer {
    //这里要引入loginHandler自己的拦截器
    @Autowired
    private LoginHandler loginHandler;
    //重写addInterceptors
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //在addInterceptor放入自己引入过来的拦截器,
        registry.addInterceptor(loginHandler)
                .addPathPatterns("/**")// /**是拦截所有
                //这里是要放行的路径
                .excludePathPatterns("/tologin","/login");
    }
}

excludePathPatterns方法参数可以像我这么写也可以写多个excludePathPatterns方法一个一个存放不过太麻烦了

不要忘了引入自己的拦截器

拦截器实现

//全局加载
@Configuration
//实现拦截器HandlerInterceptor 接口
public class LoginHandler implements HandlerInterceptor {

    //重写preHandle方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //前端登录后再session作用域存入user数据然后在这里取出
        Object user = request.getSession().getAttribute("user");
        //判断如果不为空就是登陆了放行返回true
        if (user!=null){
            return true;
        }else {
            //为空就是没登录返回false重定向到去登录的页面
            response.sendRedirect("/tologin");
            return false;
        }

    }
}

要注意controller一定要想session里存放user对象或者是登录的账号

2.过滤器

过滤器和拦截器的实现是一样的过滤器不需要拦截的路径的话可以写一个单独的类里面写上list方法类上加上@ConfigurationProperties注解吧需要拦截的路径放到properties

@ConfigurationProperties(prefix = "no.yz")
@Data
@Configuration
public class NoLoginPathConfig {

    private List<String> path;
}

过滤器实现

@WebFilter
@Component
public class LoginFilter implements Filter {
private Logger logger3 = LoggerFactory.getLogger("LoginFilter");
    //这个我是吧不需要拦截的路径放到list集合里面单独写的一个类需要引入
    @Autowired
    private NoLoginPathConfig noLoginPathConfig;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        //转换为http
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        logger3.info(new Date()+"-----判断路径是否需要拦截-------");
        //判断路径是否需要拦截
        if (noLoginPathConfig.getPath().contains(request.getRequestURI())){
            //如果不需要拦截直接放行
            logger3.info(new Date()+"-----路径可放行-------");
            filterChain.doFilter(servletRequest,servletResponse);
        }else {
            logger3.info(new Date()+"-----获取作用域中的用户名-------");
            //获取session作用域里的用户名
            Object attribute = request.getSession().getAttribute(SysInfo.userName);
            //判断是否为空
            if (attribute!=null){
                logger3.info(new Date()+"-----用户名为空不放行-------");
                //不为空方行
                filterChain.doFilter(servletRequest,servletResponse);
            }else {
                //为空拦截
                logger3.info(new Date()+"-----没有登录请先登录------");
                throw new NoLoginExcption("没有登录,请登录");
            }
        }
    }
}

着里要注意要加上

@WebFilter
@Component

这两个注解实现

Filter

过滤器接口

和拦截器一样需要在controller里在session作用域里存入登录的对象或者账号判断是否有数据当然你要是有其他好的方法也可以

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值