当前位置: 首页 > 知识库问答 >
问题:

Spring安全拆下RoleVoter前缀

巫马安怡
2023-03-14

在我工作的项目中,我们基于角色ID而不是角色描述进行身份验证,这个映射存储在数据库中。

我的问题是,如何删除Spring Security的RoleVoter前缀以实现上述设计?

共有1个答案

符俊材
2023-03-14

Spring securityRolevoter需要一个前缀,以便区分被授予的权限即角色,有关更多细节,请参见此答案。

如果您想改变这一点,您可以提供自己的自定义AccessDecisionManager,并使用自定义Rolevoter`对其进行配置。

这是这样一个自定义访问决策管理器的示例:

public class MyAccessDecisionManager  extends AffirmativeBased {


    public MyAccessDecisionManager() {
        super();
        List<AccessDecisionVoter> decisionVoters = new ArrayList<AccessDecisionVoter>();
        RoleVoter roleVoter = new MyCustomRoleVoter();
        decisionVoters.add(roleVoter);
        AuthenticatedVoter authenticatedVoter = new AuthenticatedVoter();
        decisionVoters.add(authenticatedVoter);
        setDecisionVoters(decisionVoters);

    }

并使用它来代替默认的访问决策管理器:

<bean id="myAccessDecisionManager" class="full.package.name.MyAccessDecisionManager" />

<security:http access-decision-manager-ref="myAccessDecisionManager">
    ...
</security:http>
 类似资料:
  • 在我们的应用程序中,我们计划使用RoleVoter机制,但我们希望删除ROLE前缀,因为我们实现的安全性更多地基于任务,而不是基于角色。 从技术上讲,实现没有问题,但我在文档中发现,不鼓励使用前缀为空的RoleVoter。 我想知道为什么? AFAICS,唯一的问题是,如果没有前缀,角色选择器将参与其不打算参与的决策(例如,,,…)May返回拒绝的访问,而不是弃权。 您能确认这是唯一一个前缀为空的

  • 问题内容: 我在我们的应用程序中使用Spring安全性,并希望使用存储在数据库中的更改密码选项的密码来验证用户输入。 密码如下存储在DB中。 在此,用户输入的密码使用上述逻辑进行编码并存储在DB中。现在,我只是想从用户那里获取更改密码的密码。从用户那里获得密码后,我使用上述逻辑进行编码,然后尝试与数据库进行比较。即使我使用相同的逻辑进行编码,编码后的值似乎也有所不同。 我的配置来自: 我不确定比较

  • 客户端需要LDAP和本地JDBC身份验证机制。 它们需要一种对两组用户都通用的授权机制。 应该根据用户的角色限制用户进入某些页面。以及需要应用于每个用户的单独权限(创建、更新、删除)集 那么,我如何实现按页授权,这将由管理员决定谁(哪个角色)可以访问哪个页面? 是否应该在配置中指定每个角色页组合?是否有任何方法可以动态地改变页面和角色,因为角色可能会在以后添加。

  • 当我使用security.basic.enabled=false在具有以下依赖项的Spring Boot项目上禁用安全性时: 为了修复此异常,我必须添加属性-management.security.enabled=false。我的理解是,当执行器在类路径中时,应该将security.basic.enabled=false和management.security.enabled=false设置为禁用

  • 我试图在我的资源服务器上配置Swagger身份验证,以便我可以根据我的授权服务器进行身份验证。 我将资源服务器和授权服务器分开。它们都使用不同的端口在我的本地主机上启动。 端口8083上的资源服务器 每当我试图“授权”时,就会出现CORS问题。 我从另一个网站分叉了一个项目作为我的测试场地。下面是分叉项目。 https://github.com/cbriarnold/oauth2-spring-b

  • 问题陈述:我有一些Rest的API,它们使用Spring安全性进行CSRF保护。此外,这些API将通过Angular WEB UI从不同的Origin/domain访问。我不需要Spring Authentication,因为身份验证由Siteminder处理。 方法:我遵循了Dave Syer提供的CSRF保护的链接:登录页面:Angular JS和Spring Security Part II