web-dev-qa-db-ja.com

1つのURLを認証から除外する方法

私の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を除外します。これは可能ですか?

47
hudi

次のような認証を必要としないリソースについては、<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>
82
user517491

keycloak with Spring bootソリューションを探している場合は、アプリケーションプロパティファイルで次のように試してください:

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にセキュリティが適用されます

1
Ady

私はあなたが正しいかどうかわからない!私の限られた知識で、セキュリティを実装するために、保護されるコンテンツは1つ以上のweb-resource-collection要素を使用して宣言されていると思います。各web-resource-collection要素には、オプションの一連のurl-pattern要素と、それに続くオプションの一連のhttp-method要素が含まれます。 url-pattern要素の値は、保護されたコンテンツへのアクセス試行に対応するためにリクエストがリクエスト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ロールが必要です。

0
Dileep

解決策は、コンテナベースのセキュリティの代わりに Apache Shiro のような代替セキュリティフレームワークを使用することです。保護されたコンテンツからリソースを簡単に除外できます。 Shiroを使用すると、WEB-INF/shiro.ini

[urls]
/info = anon
/**   = authc
0
Emmanuel Bourg