【问题标题】:Tomcat Basic Authentication Permissions IssueTomcat 基本身份验证权限问题
【发布时间】:2011-05-31 20:56:56
【问题描述】:

我目前有一个通过 Tomcat 运行一些基本身份验证的 Web 服务。我可以正常弹出登录框,并且可以使用我在 tomcat-users.xml 文件中定义的帐户登录。但是,在基于角色定义权限时,我遇到了一些问题。

目前,我拥有三个角色:经理、管理员和用户。我有一些方法只能由管理员角色访问。我可以作为我的经理/管理员/用户超级帐户登录并查看一切正常 - 但我也可以像普通用户一样做。

方法定义如下:

@Path("/Test")
@RolesAllowed("admin")
public class Test
{
    @GET
    @RolesAllowed("user")
    public methodThatMyUsersCanAcess{}

    @GET
    @Path("/Secure")
    @RolesAllowed("admin")
    public methodThatOnlyAdminsCanAcess{}
}

我真的不确定“用户”角色如何能够访问第二种方法,但不知何故它仍然会发生。

【问题讨论】:

  • 所以为了清楚起见,它看起来像 /Test 资源映射到 methodTheMyUsersCanAccess 并且应该只能由 user 角色访问,/Test/Secure 映射到 methodThatOnlyAdminsCanAccess 并且只有admin 角色可访问。 @RolesAllowed 注释来自 JSR 250,它声明它在方法中的使用应该覆盖它在类级别的使用。当您从类级别删除 @RolesAllowed 注释时会发生什么?
  • 它仍在做同样的事情。以“用户”身份登录,我仍然可以访问“管理员”方法。

标签: java authentication tomcat jersey


【解决方案1】:

经过进一步调查,我发现由于我的 web.xml 文件的配置方式,使用 @RolesAllowed 在我的代码中没有做任何事情。我决定朝着通过 URI 路径设置身份验证的方向前进。这是通过修改 web.xml 以允许一部分用户访问单独的 <security-constraint> 标记下的每个路径来完成的。我在这里找到了最好的资源:@​​987654321@ 在第二篇文章中。

【讨论】:

    【解决方案2】:

    关键是在web.xml中配置RolesAllowedResourceFilterFactory,如下:

    <servlet> 
        <servlet-name>jersey-servlet</servlet-name> 
        <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
            <init-param> 
                <param-name>com.sun.jersey.config.property.packages</param-name> 
                <param-value>com.mycompany.mobile.rest</param-value> 
            </init-param>
            <init-param>
                <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
                <param-value>true</param-value>
            </init-param>
            <init-param>
                <param-name>com.sun.jersey.config.feature.Trace</param-name>
                <param-value>true</param-value>
            </init-param>
            <init-param>
                <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
                <param-value>com.mycompany.mobile.rest.filter.RestSecurityFilter</param-value>
            </init-param>
            <init-param>
                <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
                <param-value>com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory</param-value>
            </init-param>
        <load-on-startup>1</load-on-startup> 
    </servlet> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2018-12-20
      • 2021-05-17
      • 2010-11-24
      • 1970-01-01
      相关资源
      最近更新 更多