我有一个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>
部分?