java - 直接使用 back spring security 内置表达式的方法

标签 java spring spring-security

我想在我的 Controller 中使用一些类似于 built-in expressions provided by Spring Security 的 (Java) 方法例如hasRole([角色]) 或 isFullyAuthenticated()。

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

SomeStaticSpringSecutityClass.isFullyAuthenticated();

编辑:

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

实际上是行不通的。如果用户被认证为“匿名”,此方法也会返回 true。请参阅上面的 spring 安全文档链接:

isAuthenticated() Returns true if the user is not anonymous

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

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

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

SecurityContextHolder.getContext().getAuthentication()

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

最佳答案

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

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

关于java - 直接使用 back spring security 内置表达式的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12896061/

相关文章:

带有注解的 Java 面向方面编程

java - 防止 SQL 注入(inject) (Java)

java - *** 中的字段 authenticationManager 需要找不到类型为 'org.springframework.security.authentication.AuthenticationManager' 的 bean

java - Spring Boot Controller 中的 REST 路径链

java - 同时按下按键时未接收到按键事件

java - spring 如何将参数注入(inject)到 Controller 方法中

java - Spring AOP : Trying to use for logging but getting IllegalArgumentException

java - Spring security 4 @PreAuthorize(hasAuthority()) 访问被拒绝

Grails Spring Security-登录后始终重定向到特定页面吗?

java - 在基类中编写一个需要在子类中覆盖的方法实现?