3

我想在我的控制器中使用一些(Java)方法,这些方法类似于Spring Security 提供的内置表达式,例如 hasRole([role]) 或 isFullyAuthenticated()。

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

SomeStaticSpringSecutityClass.isFullyAuthenticated();

编辑:

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

其实真的不行。如果用户通过“匿名”身份验证,此方法也会返回 true。请参阅上面的 spring 安全文档的链接:

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

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

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

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

SecurityContextHolder.getContext().getAuthentication()

没有提供 isFullyAuthenticated() 或 hasRole() 等方法。

4

2 回答 2

2

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

SecurityContextHolder.getContext().getAuthentication().isAuthenticated()
于 2012-10-15T13:03:13.477 回答
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;
}

我查看了文档,但没有找到一个实用程序类来做到这一点。

于 2013-09-13T17:42:06.503 回答