身份验证筛选器不使用SpringBoot

时间:2015-08-24 11:09:14

标签: java spring spring-mvc tomcat spring-boot

我正在使用Spring Boot + spring security开发一个应用程序。对于同样的我已经将过滤器定义为。

 @Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
        .authorizeRequests()
        .antMatchers("/authtoken").permitAll()
        .antMatchers("/authenticate**").permitAll()
        .antMatchers("/authfailure").permitAll()
        .antMatchers("/**").authenticated()
        .and()
            .addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class)
            .addFilterAfter(accessFilter, UsernamePasswordAuthenticationFilter.class)
            .authenticationProvider(tokenAuthenticationProvider)
            .antMatcher("/**").exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);

}

其中tokenFilter是AuthTokenFilter的实例(具有用于身份验证的代码并使用@inject注入的类)。

AuthTokenFilter将Filter接口的方法实现为。

 public class AuthTokenFilter implements Filter {
 ServletContext sc ;
 @Override
  public void init(FilterConfig fc) throws ServletException {
    sc = fc.getServletContext();
   }

  @Override
   public void doFilter(ServletRequest req, ServletResponse res, FilterChain  fc) throws IOException, ServletException {
 ------- 
 ------- 
 }

我的问题是当我使用SpringBoot运行应用程序时,它运行正常。但是当我创建一个战争并在tomcat中运行它时,init和doFilter都不会被调用。因此它返回未授权。

accessFilter也是如此。

有谁知道这种行为背后的原因?或者我需要做些什么来让我的应用程序在tomcat上运行?

1 个答案:

答案 0 :(得分:0)

您使用的Tomcat版本是什么?

我不确定,但试试这个:

在AuthTokenFilter类的声明中,添加anotation @Component

我有一个带过滤器的项目,只写:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCORSFilter implements Filter ...