весной я сделал HandlerInterceptor для разрешения повторных коммитов из запросов,
когда я пытался интегрировать shiro весной, я обнаружил вопрос: если я использую anon filter для повторного принятия (например, / login), код работает хорошо, но если я использую свой собственный фильтр для обработки запросов, запросы всегда ожидают ...
handlerInterceptor:
public class RepeatSubmitHandler implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("preHandler was working....");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("afterCompletion was working...");
}
}
shiroConfig:
@Bean("shiroFilter")
public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
shiroFilter.setSecurityManager(securityManager);
Map<String, Filter> filters = shiroFilter.getFilters();
filters.put("oauth2", new OAuth2Filter());
shiroFilter.setFilters(filters);
Map<String, String> filterMap = new LinkedHashMap<>();
//anon filter, shiro default filter
filterMap.put("/api/sys/login", "anon");
//custom filter
filterMap.put("/**", "oauth2");
shiroFilter.setFilterChainDefinitionMap(filterMap);
return shiroFilter;
}
Контроллер:
@PostMapping("/login")
public RestResponse login(@RequestBody SysLoginVo loginForm) {
log.info("login was working...");
}
@GetMapping("/nav")
public RestResponse nav() throws InterruptedException {
log.info("nav was working...");
}
консоль с анонным фильтром для повторного принятия: это моя цель
preHandler was working....
login was working...
preHandler was working....
preHandler was working....
preHandler was working....
afterCompletion was working...
консоль с пользовательским фильтром для повторного принятия:
preHandler was working....
nav was working...
afterCompletion was working...
preHandler was working....
nav was working...
afterCompletion was working...