web-dev-qa-db-fra.com

Comment exclure une URL de l'autorisation

Mon web.xml ressemble à:

<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>

cela protège tous les côtés de l'autorisation mais je veux exclure/info. Est-ce possible ?

47
hudi

Omettez le <auth-constraint> élément dans <security-constraint> pour les ressources pour lesquelles vous n'avez pas besoin d'authentification comme:

<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

Si vous recherchez une solution keycloak avec Spring boot, essayez ceci dans votre fichier de propriétés d'application:

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

Cela appliquera la sécurité sur toutes les URL sauf / info

1
Ady

Je ne sais pas si je te comprends bien! Avec mes connaissances limitées, je pense que pour implémenter la sécurité, le contenu à sécuriser est déclaré en utilisant un ou plusieurs éléments de collecte de ressources Web. Chaque élément de collection de ressources Web contient une série facultative d'éléments de modèle d'URL suivie d'une série facultative d'éléments de méthode http. La valeur de l'élément url-pattern spécifie un modèle d'URL par rapport auquel une URL de demande doit correspondre pour que la demande corresponde à une tentative d'accès au contenu sécurisé. La valeur de l'élément http-method spécifie un type de requête HTTP à autoriser.

<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>

L'URL située sous le chemin d'accès restreint de l'application Web nécessite un rôle AuthorizedUser.

0
Dileep

Une solution consiste à utiliser un cadre de sécurité alternatif comme Apache Shiro au lieu de la sécurité basée sur les conteneurs. Il est ensuite facile d'exclure une ressource du contenu protégé. En utilisant Shiro, vous mettriez WEB-INF/shiro.ini:

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