59

我的 web.xml 看起来像:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>app</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>Role</role-name>
    </auth-constraint>
</security-constraint>

这可以保护每一方免受授权,但我想排除 /info。这可能吗 ?

4

4 回答 4

105

省略不需要身份验证的资源中的<auth-constraint>元素,例如:<security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>app</web-resource-name>
        <url-pattern>/info</url-pattern>
    </web-resource-collection>
    <!-- OMIT auth-constraint -->
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>app</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>Role</role-name>
    </auth-constraint>
</security-constraint>
于 2013-02-25T07:32:13.770 回答
7

如果您正在寻找带有Spring 引导解决方案的keycloak,请在您的应用程序属性文件中尝试这样的操作:

keycloak.security-constraints[0].authRoles[0]=users
keycloak.security-constraints[0].security-collections[0].patterns[0]=/*
keycloak.security-constraints[1].security-collections[0].patterns[0]=/info

这将对除/info之外的所有 URL 应用安全性

于 2019-05-21T13:31:26.353 回答
0

不知道我说的对不对!以我有限的知识,我认为为了实现安全性,要使用一个或多个 web-resource-collection 元素声明要保护的内容。每个 web-resource-collection 元素都包含一系列可选的 url-pattern 元素,后跟一系列可选的 http-method 元素。url-pattern 元素值指定 URL 模式,请求 URL 必须与该 URL 模式匹配,以使请求对应于访问受保护内容的尝试。http-method 元素值指定允许的 HTTP 请求类型。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Secure Content</web-resource-name>
        <url-pattern>/restricted/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>AuthorizedUser</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<!-- ... -->
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>The Restricted Zone</realm-name>
</login-config>
<!-- ... -->
<security-role>
    <description>The role required to access restricted content </description>
    <role-name>AuthorizedUser</role-name>
</security-role>

位于 Web 应用程序的 /restricted 路径下的 URL 需要 AuthorizedUser 角色。

于 2013-02-27T09:34:48.703 回答
-2

一种解决方案是使用Apache Shiro等替代安全框架,而不是基于容器的安全性。然后很容易从受保护的内容中排除资源。使用 Shiro 你会输入WEB-INF/shiro.ini

[urls]
/info = anon
/**   = authc
于 2013-02-25T16:48:14.580 回答