ti-enxame.com

Como excluir um URL da autorização

Meu web.xml se parece com:

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

isso protege todos os lados da autorização, mas quero excluir/informações. Isso é possível ?

47
hudi

Omita o <auth-constraint> elemento em <security-constraint> para recursos para os quais você não precisa de autenticação, como:

<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

Se você estiver procurando por keycloak com Spring boot solução, tente o seguinte no seu arquivo de propriedades do aplicativo:

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

Isso aplicará a segurança em todos os URLs, exceto / info

1
Ady

Não sei se entendi direito! Com meu conhecimento limitado, acho que, para implementar a segurança, o conteúdo a ser protegido é declarado usando um ou mais elementos de coleta de recursos da web. Cada elemento da coleção de recursos da web contém uma série opcional de elementos de padrão de URL, seguidos por uma série opcional de elementos do método http. O valor do elemento url-pattern especifica um padrão de URL com o qual um URL de solicitação deve corresponder para que a solicitação corresponda a uma tentativa de acessar o conteúdo protegido. O valor do elemento http-method especifica um tipo de solicitação HTTP a ser permitida.

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

O URL localizado no caminho restrito/do aplicativo Web requer uma função AuthorizedUser.

0
Dileep

Uma solução é usar uma estrutura de segurança alternativa como Apache Shiro em vez da segurança baseada em contêiner. Então é fácil excluir um recurso do conteúdo protegido. Usando Shiro, você colocaria WEB-INF/shiro.ini:

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