直接使用支持Spring安全性内置表达式的方法

时间:2012-10-15 12:52:51

标签: java spring spring-security

我想在我的控制器中使用与built-in expressions provided by Spring Security类似的一些(Java)方法,例如hasRole([role])或isFullyAuthenticated()。

你知道我在哪里可以找到这些方法以及如何在控制器的Java方法中调用它们(我不想使用Spring EL,我想使用普通的Java)?例如

SomeStaticSpringSecutityClass.isFullyAuthenticated();

编辑:

SecurityContextHolder.getContext().getAuthentication().isAuthenticated()

实际上并没有真正奏效。如果用户被认证为“匿名”,则此方法也返回true。请参阅上面的弹簧安全文档的链接:

  

isAuthenticated()如果用户不是匿名的,则返回true

相反,你必须使用类似的东西:

public boolean isAuthenticated() {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    return !(authentication == null || authentication instanceof AnonymousAuthenticationToken);
}

但无论如何:我真的不想再次实现逻辑,这已经在Spring Security的某个地方实现了。另外

SecurityContextHolder.getContext().getAuthentication()

没有提供像isFullyAuthenticated()或hasRole()这样的方法。

2 个答案:

答案 0 :(得分:2)

看看org.springframework.security.core.contex.SecurityContextHolder。例如,检查当前用户是否经过身份验证:

SecurityContextHolder.getContext().getAuthentication().isAuthenticated()

答案 1 :(得分:0)

我找到了使用界面的SecurityContextHolderAwareRequestFilter

AuthenticationTrustResolver.isAnonymous(Authentication authentication);

如果要使用Spring源代码,可以检查实例化此接口的类SecurityContextHolderAwareRequestWrapper,如下所示:

private final AuthenticationTrustResolver authenticationTrustResolver = new AuthenticationTrustResolverImpl();

public Authentication getAuthentication() {
    if (!authenticationTrustResolver.isAnonymous(auth)) {
        return auth;
    }
    return null;
}

我查看了文档,但没有找到实用程序类。