拒绝在j2ee中访问HTTP方法

时间:2014-04-10 16:57:20

标签: java-ee configuration jboss

我遇到的情况是我需要拒绝访问未使用的HTTP方法 我们在JBoss 4.2上运行并需要登录。除GET和POST外,应拒绝所有其他访问尝试。

我尝试过以下web.xml的配置,但它没有帮助。 servlet仍然被调用并返回例如。 a"访问被拒绝"在DELETE请求上。'
相反,我希望返回501: Not implemented 如果我没有在第一个安全约束中包含任何HTTP方法,则会立即向用户提供未经授权的页面。

<web-app>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Deny most when not logged in</web-resource-name>
            <url-pattern>/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>
        <!-- no auth-constraint tag here -->
    </security-constraint>

    <security-constraint>
    <web-resource-collection>
        <web-resource-name>Allow methods</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>PUT</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>Admin</role-name>
    </auth-constraint>
    </security-constraint>
</web-app>

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

玩不同的可能性和Postman我发现第一个安全约束是黑名单。这里添加的http方法被拒绝,JBoss返回403 所以第一个安全约束现在看起来像这样:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Deny most when not logged in</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint/>
</security-constraint>