【发布时间】:2014-05-24 11:32:16
【问题描述】:
根据 Spring Security 3.2.0 文档,我创建了一个 Spring Security 配置并在 getRootConfigClasses 中引用它:
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfiguration.class, SpringSecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringWebConfiguration.class};
}
我可以证明这主要是因为 Spring Security 强制用户根据我的配置登录。问题在于方法的安全性。我已经用 @EnableGlobalMethodSecurity 对 SpringSecurityConfig 进行了注释,如下所示:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
然后在我的控制器中注释了一个方法:
@PreAuthorize("hasAuthority('ROLE_ADMIN')")
只允许具有 ROLE_ADMIN 的人访问此控制器方法。但是,使用 ROLE_USER 和 ROLE_ADMIN 登录的用户可以调用此方法,而不是预期的。
通过修改我的 Web 应用程序初始化程序以双重包含 Spring Security 配置,它开始工作,但我想对我的根上下文以及 Web 上下文中的方法使用方法身份验证,我似乎无法做到这一点发生:
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfiguration.class, SpringSecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringSecurityConfig.class, SpringWebConfiguration.class};
}
每个上下文都需要自己的安全配置吗?还是在父上下文中一个就足够了?
谢谢。
【问题讨论】:
-
你发现了吗?我面临同样的问题。我(未成功)尝试将安全配置拆分为 2:根(父)上下文安全性和 Web 上下文(子)安全性...
-
不,我没有。我将此特定应用程序移至使用一个上下文的 Spring Boot,这对我的目的来说很好。
标签: spring-security