Tomcat基本身份验证权限问题

时间:2011-05-31 20:56:56

标签: java authentication tomcat jersey

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

目前,我有三个角色:经理,管理员和用户。我有一些方法应该只能通过管理员角色访问。我可以作为我的经理/管理员/用户超级帐户登录,看到一切都很好 - 但我也可以像普通用户一样。

方法的定义如下:

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

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

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

2 个答案:

答案 0 :(得分:1)

经过一些调查后,我发现由于我的web.xml文件的配置方式,使用@RolesAllowed在我的代码中什么也没做。我决定朝着通过URI路径设置身份验证的方向前进。这是通过修改web.xml以允许用户子集访问单独的<security-constraint>标记下的每个路径来完成的。我在这里找到了我最好的资源:http://www.coderanch.com/t/176095/java-Web-Component-SCWCD/certification/auth-constraint-confusion在第二篇文章中。

答案 1 :(得分:0)

关键是在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>