我正在使用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上运行?
答案 0 :(得分:0)
您使用的Tomcat版本是什么?
我不确定,但试试这个:
在AuthTokenFilter类的声明中,添加anotation @Component
我有一个带过滤器的项目,只写:
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCORSFilter implements Filter ...