【问题标题】:How do I configure my entity-filtering scope for security annotations in the web.xml?如何为 web.xml 中的安全注释配置我的实体过滤范围?
【发布时间】:2015-09-10 02:16:03
【问题描述】:

阅读球衣文档:https://jersey.java.net/documentation/latest/entity-filtering.html 我能够通过将 SecurityEntityFilteringFeature 添加到我的 web.xml 以及其他激活的功能来激活它。

所以我的 web.xml 的 features 部分看起来像这样:

    ...
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>
            org.glassfish.jersey.server.gae.GaeFeature;
            org.glassfish.jersey.server.mvc.jsp.JspMvcFeature;
            org.glassfish.jersey.media.multipart.MultiPartFeature;
            org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
            org.glassfish.jersey.message.filtering.SecurityEntityFilteringFeature;
        </param-value>
    </init-param>
    ...

注释@PermitAll(不会改变任何东西)和@DenyAll(总是从json中删除实体)工作得很好。

问题是:要使用注释@RolesAllowed,我还需要按照文档中的说明在实体过滤范围内注册角色

EntityFilteringFeature.ENTITY_FILTERING_SCOPE - “jersey.config.entityFiltering.scope”

定义一个或多个在读取/写入实体时应用作实体过滤范围的注释。

但我只能通过我的 web.xml 配置它,我无处可做以下操作:

new ResourceConfig()
// Set entity-filtering scope via configuration.
.property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, new Annotation[] {SecurityAnnotations.rolesAllowed("manager")})
// Register the SecurityEntityFilteringFeature.
.register(SecurityEntityFilteringFeature.class)
// Further configuration of ResourceConfig.
.register( ... );

有什么猜测吗?

【问题讨论】:

    标签: java google-app-engine web.xml jersey-2.0


    【解决方案1】:

    您可以同时使用ResourceConfig web.xml。它不是“非此即彼”。例如

    <servlet>
        <servlet-name>MyApplication</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>org.foo.JerseyConfig</param-value>
        </init-param>
    </servlet>
    
    package org.foo;
    
    public class JerseyConfig extends ResourceConfig {
        public JerseyConfig() {
            register(...);
            property(...);
        }
    }
    

    web.xml 和ResourceConfigregistrations/configuration/properties 等都将被使用。您可以查看其他一些部署选项,here

    如果你真的必须远离ResourceConfig(不知道为什么会出现这样的问题),你总是可以创建一个Feature

    @Provider
    public class MyFilteringFeature implements Feature {
    
        @Override
        public boolean configure(FeatureContext context) {
            context.property(...);
            context.register(...);
            return true;
        }
    }
    

    然后只需注册该功能(除非您正在扫描包,否则应该使用@Provider 注释来获取它)。

    【讨论】:

    • 感谢您的回答@peeskillet,我将尝试第一个解决方案:)
    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 2013-01-19
    • 2019-05-23
    • 2015-05-29
    • 2012-05-10
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    相关资源
    最近更新 更多