我有一些控制器,其中某些使用请求映射注释的方法期望codes
(字符串列表)的请求参数
并且我想授权这些代码列表来检查当前用户是否有权访问列表中的所有代码并对其进行过滤。我想要为这些控制器创建通用过滤器,但我无法将其与URL映射一起应用。有没有办法创建过滤器并将注释仅应用于某些方法(请求映射)?
另一个问题是,可以将600个代码列表保留在会话中吗,或者db调用更合适?我期望这些代码授权经常调用(用户可以查看(更频繁),更新(不太频繁)与代码相关的数据)
更新:
例如,我有两种方法:
@RequestMapping(value="/getInfo")
public void viewInfo(@RequestParam("codes") List<String> codes)
@RequestMapping(value="/getDetailInfo")
public void getDetailInfo(@RequestParam("codes") List<String> codes)
现在,如果我想验证代码,则必须在两种方法中都放入验证逻辑,我要编写一个过滤器/拦截器,以检查用户是否有权查看列表中的所有代码,我可以将用户网址映射到拦截我所问的请求,我可以使用on方法来验证代码而无需添加url映射。
答案 0 :(得分:1)
此线程可能有帮助:
将HandlerInterceptor注册到给定路径模式的示例(在上面的链接中为完整示例):
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
SessionManager getSessionManager() {
return new SessionManager();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getSessionManager())
.addPathPatterns("/**")
.excludePathPatterns("/resources/**", "/login");
// assuming you put your serve your static files with /resources/ mapping
// and the pre login page is served with /login mapping
}
}
您可以使用Caching轻松保存代码列表(无需将其存储在会话中)。
这样,函数的第一次调用将检索代码并将命中数据库并保存在缓存中。后续调用不会一直到数据库,而是使用存储在缓存中的值(只要它还存在)。