Springboot filter 拦截指定的路径(注入spring Bean方式)

第一步:创建过滤器,引入bean

public class SystemUrlFilter implements Filter {

    @Autowired
    private UserService userService;

     private String[] prefixIignores ;
     private String ignoresParam;

    @Override
    public void init(FilterConfig config) throws ServletException {
        ignoresParam = config.getInitParameter("exclusions");  
        if (StringUtils.isNotEmpty(ignoresParam)) {  
            prefixIignores = ignoresParam.split(",");  
        }  
            return;  
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
         HttpServletRequest request = (HttpServletRequest) req;
         AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();
         if (canIgnore(request)) {  
             chain.doFilter(request, response);
                return;  
            } 

         Map<String, Object> attributes = principal.getAttributes();
         String username = (String) attributes.get("username");
         User user = null;
         try {
             user = userService.findUserByUsername(username);
             chain.doFilter(request, response);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
         prefixIignores=null;  
    }

     private boolean canIgnore(HttpServletRequest request) {  
        boolean isExcludedPage = false;
        for (String page : prefixIignores) {// 判断是否在过滤url之外
            if (((HttpServletRequest) request).getServletPath().equals(page)) {
                isExcludedPage = true;
                break;
            }
        }
        return isExcludedPage;
    }


第二步:注册filter到配置中

@Configuration
public class WebConfig

  /**
     * 拦截用户访问系统权限fi 
     * @return
     */
    @Bean
    public FilterRegistrationBean systemUrlFilterBean() {
         FilterRegistrationBean registrationBean = new FilterRegistrationBean();
          registrationBean.setFilter(new DelegatingFilterProxy("systemUrlFilter"));
          registrationBean.addInitParameter("targetFilterLifecycle","true");
          registrationBean.addUrlPatterns("/*");
          registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/reg");
          registrationBean.setDispatcherTypes(DispatcherType.REQUEST);
          return registrationBean;
    }

    @Bean(name="systemUrlFilter")
    public SystemUrlFilter systemUrlFilter(){
        return new SystemUrlFilter();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值