我正在所有控制器上配置Spring Security。 我希望一些方法执行只在“我的系统启用”时启动。可以通过特定的静态方法从所有控制器访问此信息(我可以将其设置为非静态)。 我的观点是,我想避免在每个方法的开头对java代码进行明确检查。 我如何通过Spring Security到达那里?
答案 0 :(得分:1)
一种方法是使用handler interceptor。
这是一般性的想法:
(1)配置要阻止的网址格式:
<util:list id="sysEnableCheckUrlPatterns" value-type="java.lang.String">
<beans:value>/module1/**</beans:value>
<beans:value>/module2/**</beans:value>
</util:list>
(2)写一个拦截器:
public class SysEnableCheckInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
/*
If system enabled then return true. Otherwise return false (and optionally write something in response)
*/
}
}
(3)配置拦截器。在3.1中你可以这样做:
@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {
@Resource(name="sysEnableCheckUrlPatterns")
/* or use @Autowired or @Inject if you like */
private String[] sysEnableCheckUrlPatterns;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SysEnableCheckInterceptor()).addPathPatterns(sysEnableCheckUrlPatterns);
}
}
答案 1 :(得分:0)
您可以在安全注释中使用SPEL(Spring Expression Language)。
请参阅http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html