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

角色/权限不在Webphere Liberty中工作

梁兴修
2023-03-14

我正在尝试让Spring Security角色与websphere自由一起工作。我知道我的自由设置是正确的,因为我编写了一个非常简单的servlet 3应用程序,它具有基于角色的限制,并且在同一台服务器上使用相同的角色限制。

以下是我的安全配置的相关部分:

@Override
protected void configure(final HttpSecurity http) throws Exception {
    LOGGER.info("adding testing constraint");
    http.authorizeRequests()
            .anyRequest().authenticated()
            .and().httpBasic();

    if (appProperties.isContainerManaged()) {
        LOGGER.info("using container managed");
        http.jee().mappableRoles("TESTING", "ADMIN");
    }
    http.csrf().disable()
            .logout()
            .permitAll();
}

上面是在服务器日志中打印出“使用容器管理”,所以我知道这:)

在我的控制器中,我传入了主体:

public String index(final Model model, final Principal principal, final HttpSession session,
                    final HttpServletRequest request) {

但是当我打电话的时候:

Authentication authentication = (Authentication) principal;
authentication.getAuthorities()

我什么也没得到。

以下是server.xml的相关部分:

<application type="war" id="security-sample" name="security-test"
         location="${server.config.dir}apps/security-sample.war">
   <application-bnd>
       <security-role name="TESTING">
           <user name="myuser" />
       </security-role>
   </application-bnd>
</application>

我挖得更深了一点。我将应用程序转换为使用WebSpherePreAuthenticatedProcessingFilter。(我很震惊这上面的文档这么少)。我让过滤器加载,但它在Liberty上失败了:

javax.naming。NameNotFoundException:用户注册表

这似乎是一个已知问题:

https://www.ibm.com/developerworks/community/forums/html/topic?id=62b6761f-1ae4-42c3-847b-485cbd95730

据我所知,如果你使用容器管理的安全性,Liberty在Spring Security中几乎不受支持。您可以获得用户信息,但不能获得组/角色/权限信息。

更新:

我更进一步了,我现在可以让用户的组自由显示,但不是通过安全角色映射的角色。

诀窍是这样的。我创建了一个LibertyPreAuthenticatedWebAuthenticatedDetailsSource来获取用户的组。我使用了这里的调用:http://www.ibm.com/support/knowledgecenter/SSD28V_8.5.5/com.ibm.websphere.wlp.core.doc/ae/rwlp_sec_apis.html来弄清楚如何为用户获取组。

现在我只需要弄清楚如何使用映射的安全角色.

共有1个答案

冯浩旷
2023-03-14

我已经在Java 11.0.8,开放自由20.0.0.8和Spring启动2.3.1中使用了这个。下面是相关的安全配置。@DeclareRoles启用ROLE_ACTUATOR映射所必需的,则 .hasRole(“ACTUATOR”)方法调用是不够的。

@Configuration
@EnableWebSecurity(debug=true)
@EnableGlobalMethodSecurity(jsr250Enabled = true)
@DeclareRoles({"ROLE_SERVICE","ROLE_ACTUATOR"})
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
    @Override
    protected void configure(HttpSecurity http)
    throws Exception
    {
        http.csrf().disable()
            .authorizeRequests()
                .requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("ACTUATOR")
                .anyRequest().authenticated()
            .and()
                .httpBasic()
            .and()
                .jee().mappableRoles("ACTUATOR","SERVICE")
            ;
    }

server.xml的相关部分

<basicRegistry>
    <user name="wsAdmin" password="{hash}ATAAAAAI4h/5AWC+TLRAAAAAIOI2KiXXXDx7mesI2R99XTI1D1rskbx2IGeOsroCkqZh"/>
    <user name="wsService" password="{hash}ATAAAAAItVt5WPc0H/NAAAAAIGSCDtS7RkFRXeG6v3hOqUAkcAdLme5Pmx1bSNsk9kVN"/>
</basicRegistry>

<webApplication context-root="sample" type="war" location="C:\Deploy\sample-0.0.1-SNAPSHOT.war" >
    <application-bnd>
        <security-role name="ROLE_SERVICE">
            <user name="wsService" />
        </security-role>
        <security-role name="ROLE_ACTUATOR">
            <user name="wsAdmin" />
        </security-role>
    </application-bnd>
</webApplication>

为映射生成这些日志条目

[2020-09-29T14:55:50.212-0400] 0000002f SystemOut     O   2020-09-29 14:55:50.211 DEBUG 11460 --- [ecutor-thread-9] p.j.J2eePreAuthenticatedProcessingFilter : PreAuthenticated J2EE principal: wsService
[2020-09-29T14:55:50.213-0400] 0000002f SystemOut     O   2020-09-29 14:55:50.212 DEBUG 11460 --- [ecutor-thread-9] p.j.J2eePreAuthenticatedProcessingFilter : preAuthenticatedPrincipal = wsService, trying to authenticate
[2020-09-29T14:55:50.217-0400] 0000002f SystemOut     O   2020-09-29 14:55:50.217 DEBUG 11460 --- [ecutor-thread-9] henticatedWebAuthenticationDetailsSource : J2EE roles [[ROLE_SERVICE]] mapped to Granted Authorities: [[ROLE_SERVICE]]


[2020-09-29T14:56:43.558-0400] 00000035 SystemOut     O   2020-09-29 14:56:43.558 DEBUG 11460 --- [cutor-thread-13] p.j.J2eePreAuthenticatedProcessingFilter : PreAuthenticated J2EE principal: wsAdmin
[2020-09-29T14:56:43.558-0400] 00000035 SystemOut     O   2020-09-29 14:56:43.558 DEBUG 11460 --- [cutor-thread-13] p.j.J2eePreAuthenticatedProcessingFilter : preAuthenticatedPrincipal = wsAdmin, trying to authenticate
[2020-09-29T14:56:43.559-0400] 00000035 SystemOut     O   2020-09-29 14:56:43.559 DEBUG 11460 --- [cutor-thread-13] henticatedWebAuthenticationDetailsSource : J2EE roles [[ROLE_ACTUATOR]] mapped to Granted Authorities: [[ROLE_ACTUATOR]]
 类似资料:
  • 我正在使用Apache Shiro(v1.2.3),我正确地设置了用户名/密码身份验证,并且它正在工作(我将密码散列和salt存储在远程数据库中)。我现在正在尝试使用角色设置权限。我有一个扩展的领域,例如。 我的如下所示: credentialsMatcher=org.apache.shiro.authc.Credential.sha256CredentialsMatcher credential

  • 下午好.如何在不使用不同的OAUTH2服务的情况下,为一个应用程序中的特定实体(类似于RBAC/ABAC)的特定控制器配置用户的权限和角色? 还有一个名为Project的实体。用户可能是许多项目的成员。有一些项目用户角色:PROJECT_ADMIN、PROJECT_EDITO、PROJECT_USER。每个项目角色都可以拥有自己的权限(权限),如向项目添加用户、编辑项目等。所有角色配置都存储在'P

  • 我有一个springmvc和springsecurity项目。 角色: 权限: 以及在角色和权限之间: 接下来的情况是: 我有一个控制器,我想用注释保护操作 大概是这样的: 但是注释不起作用,但是如果我把代码改成这样就可以了: 有人能给我一个提示吗?我不想用权限限制操作,我更喜欢角色限制。 提前谢谢。

  • 诸葛io提供了权限管理的功能,共分为超级管理员、管理员、开发者、普通成员、普通成员(仅看板)五种。 接下来分别从公司层面和应用层面区分这些成员的使用权限。 一、成员角色权限表·公司层面 超级管理员 其他成员 公司信息 查看公司基本信息 √ 修改公司名称 √ 查看套餐信息 √ 成员管理 查看公司成员 √ 邀请公司成员 √ 移除公司成员 √ 小组管理 查看小组 √ 新建编辑删除小组 √ 权限管理 移交

  • 有些企业会对向用户发送的营销内容进行严格的管理——基层的运营或营销经理拟定的活动必须经过上级管理者的审批,方可生效执行。为此,诸葛的智能触达中提供了基于用户角色的触达活动权限管理,以支撑上述的企业需求。 如果您的团队需要使用权限控制,可通过以下步骤开启使用: 开启权限控制:智能触达的权限控制默认是关闭的,需要开启后方能使用; 分配用户角色:为团队成员分别分配设定「管理员」和「运营人员」角色; 开始

  • 角色是分配给用户的权限集合。默认情况下,Navicat Monitor 包含三个预定义的角色供你分配给不同用户以限制其访问权限。它还允许你创建具自定义权限设置的新角色。苃要配置角色及其权限,请前往“配置”->“角色和权限”。 每个预定义的角色都有不同的权限: 角色 权限 管理员 可以完全控制访问所有页面。此角色的权限是不可编辑的。 DBA 可以访问所有页面,但以下功能“除外”: - 激活令牌密钥,