这是因为你的过滤器声明时使用了@bean,所以这个过滤器也注册到了spring mvc中,才导致执行了两次,spring mvc执行了一次,spring security执行了一次。
解决办法:简单的就是把@bean给删除掉,但有可能会引发一些问题,不知道你有没有
比如,在过滤器定义了@Autowired,@Value("${token.header}")这些注解,在有@bean的情况下,这些注解spring都会解析,但没了@bean这些注解也没用了,可以把这些变量写在spring security配置类上,就是继承了WebSecurityConfigurerAdapter的类,因为这个配置类肯定会使用@Configuration,所以@Autowired,@Value("${token.header}")这些注解就会生效,看例子吧
过滤器:
/** * json web token 在请求头的名字 */ private String tokenHeader; /** * 辅助操作 token 的工具类 */ private TokenUtils tokenUtils; /** * Spring Security 的核心操作服务类 * 在当前类中将使用 UserDetailsService 来获取 userDetails 对象 */ private UserDetailsServiceImpl userDetailsService; publ