Spring Boot 添加第三方 Filter

276 阅读1分钟

因项目是前后端分离,且后端使用 jar 方式启动,传统的 web.xml 方式注入 Filter 的方式已经做不到了,只能使用手动注入

import org.xxxxx.AuthenticationFilter;
import org.xxxxx.HttpServletRequestWrapperFilter;
import org.xxxxx.Cas20ProxyReceivingTicketValidationFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.LinkedHashMap;
import java.util.Map;

@Configuration
public class FilterConfig {

  @Bean
  public FilterRegistrationBean<AuthenticationFilter> registerCASFilter() {
    FilterRegistrationBean<AuthenticationFilter> registration = new FilterRegistrationBean<>();
    registration.setFilter(new AuthenticationFilter());
    registration.addUrlPatterns("/app/ssoLogin");
    registration.setName("CASFilter");
    Map<String, String> initParams = new LinkedHashMap<>();
    initParams.put("casServerLoginUrl", "xxxx");
    initParams.put("serverName", serverName);
    registration.setInitParameters(initParams);
    return registration;
  }

  private static final String serverName = "http://xxxx";

  @Bean
  public FilterRegistrationBean<Cas20ProxyReceivingTicketValidationFilter> registerCas20ProxyReceivingTicketValidationFilter() {
    FilterRegistrationBean<Cas20ProxyReceivingTicketValidationFilter> registration = new FilterRegistrationBean<>();
    registration.setFilter(new Cas20ProxyReceivingTicketValidationFilter());
    registration.addUrlPatterns("/app/ssoLogin");
    registration.setName("CAS Validation Filter");
    Map<String, String> initParams = new LinkedHashMap<>();
    initParams.put("casServerUrlPrefix", "xxxx");
    initParams.put("serverName", serverName);
    initParams.put("encoding", "UTF-8");
    registration.setInitParameters(initParams);
    return registration;
  }


  @Bean
  public FilterRegistrationBean<HttpServletRequestWrapperFilter> registerHttpServletRequestWrapperFilter() {
    FilterRegistrationBean<HttpServletRequestWrapperFilter> registration = new FilterRegistrationBean<>();
    registration.setFilter(new HttpServletRequestWrapperFilter());
    registration.addUrlPatterns("/app/ssoLogin");
    registration.setName("CAS HttpServletRequest Wrapper Filter");
    return registration;
  }

}