Spring Security 4:允许对同一网址进行匿名访问和身份验证访问

时间:2015-04-27 11:32:55

标签: spring spring-security jersey jersey-2.0

我有一个Jersey 2应用程序,我尝试使用Spring Security 4和HTTP Basic身份验证进行保护。 控制器类是一个Spring bean,并注入Jersey Rest Resource。我在控制器的方法上使用了Spring Pre-Post-annotations,并尝试了以下配置:

<security:global-method-security pre-post-annotations="enabled" />
<security:http>
    <security:http-basic />
    <security:intercept-url pattern="/**" access="hasRole('USER')" />
    <security:csrf disabled="true"/>
</security:http>

问题:对于经过http-basic身份验证的用户可以正常工作,带注释的方法(@PreAuthorize("hasRole('USER')"))是安全的,只有在提供正确的凭据时才有效。但是:不再可能对/ **下的其他资源进行匿名访问(这是正确的,但我想拥有它)。

使用

<security:intercept-url pattern="/**" access="permitAll" />
相反,即使他们通过HTTP Basic提供正确的凭据,每个用户也都是匿名处理的。因此,即使具有正确角色的用户无法访问带注释的方法,也会抛出AccessDeniedException。

我想要的:应该允许每个用户访问&#34; / **&#34;下的所有资源。如果他通过HTTTP Basic进行身份验证并具有足够的权限,则可以调用带注释的方法。如果他未经过身份验证或授权,则应抛出AccessDeniedException。

如何配置Spring安全性<http>部分?

0 个答案:

没有答案