小编gha*_*las的帖子

使用 Spring Security 6 实现自定义表达式处理

在我的 Java Spring Boot 3 应用程序中,我想将 Spring Security 与@PreAuthorize/一起使用@PostAuthorize。由于某种原因,我收到的 Keycloak 生成的令牌没有Authorities像 Spring 期望的那样具有角色,而是在"realm_access"属性下。
因此,我决定继续实现一个自定义表达式处理程序,遵循我在https://docs.spring.io/spring-security/reference/servlet/authorization/method-security.html#customizing-expression中找到的内容-处理

所以,一些代码
表达式根

public class CustomMethodSecurityExpressionRoot
        extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {

    public CustomMethodSecurityExpressionRoot(Authentication authentication) {
        super(authentication);
    }

    public boolean hasRealmRole(String role) {
        var principal = ((OAuth2AuthenticatedPrincipal)this.getPrincipal());
        if (principal == null) {
            return false;
        }

        var realmAccess = (JSONObject)principal.getAttribute("realm_access");
        if (realmAccess == null) {
            return false;
        }

        var roles = (JSONArray)realmAccess.get("roles");
        if (roles == null || roles.isEmpty()) {
            return …
Run Code Online (Sandbox Code Playgroud)

java security spring spring-boot

2
推荐指数
1
解决办法
1769
查看次数

标签 统计

java ×1

security ×1

spring ×1

spring-boot ×1