如何查看@PreAuthorize正在查看的角色?

时间:2014-05-08 23:31:06

标签: java spring spring-security

我有一些Spring Controller方法,最初使用@Secured符号

进行保护
@Secured("Role_Admin")
public void dummyMethod(HttpServletRequest request) ...

哪个会识别角色罚款,或拒绝用户没有角色(如预期的那样)。但是,我尝试切换到使用@PreAuthorize注释,现在一切都被拒绝了。

@PreAuthorize("hasRole('Role_Admin')")
public void dummyMethod(HttpServletRequest request) ...

如果我删除@PreAuthorize注释并执行某些操作,请说

request.isUserInRole("Role_Admin")

将返回true。如果我留下注释,然后检查用户的角色 在访问被拒绝处理程序中,我可以看到' Role_Admin'权限授予用户。

所以我不确定@PreAuthorize背后的代码正在检查哪些角色/权限。有谁知道我可以检查哪些春季安全课程?

修改

我使用Java来配置所有内容。所以它看起来像这样:

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfigurator extends GlobalMethodSecurityConfiguration { ...

在我对以下答案的回复中,我从@Secured切换的原因是因为它没有启动我的AccessDeniedHandler。如果我可以强迫它这样做,我会坚持下去。 @PreAuthorize确实启动了处理程序。

EDIT2

正如Andrei指出的那样,我尝试在我的配置中定义它。但它并没有什么不同。

@Bean
public SimpleMappingExceptionResolver resolver() {
    SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();

    resolver.setExcludedExceptions(AccessDeniedException.class);

    Properties mappings = new Properties();
    mappings.put("org.springframework.web.servlet.PageNotFound", "p404");
    mappings.put("org.springframework.dao.DataAccessException", "dataAccessFailure");
    mappings.put("org.springframework.transaction.TransactionException", "dataAccessFailure");

    resolver.setExceptionMappings(mappings);

    return resolver;
}

1 个答案:

答案 0 :(得分:0)

为什么要使用@PreAuthorize而不是@Secured?我想你的@PreAuthorize失败了,因为你没有将你的http安全性设置为使用表达式:

<http use-expressions="true">

我想如果你这样做,那么你使用哪个版本并不重要。我似乎记得有一个在SO上发帖的Spring开发人员说@Secured是首选方法,因为它比@PreAuthorize或某些原因更新。我怀疑@Secured更自包含,并且不与尽可能多的Spring组件交互。如果这不起作用,请告诉我。