我正在使用Spring MVC 4.X开发应用程序,使用spring security 4.X进行身份验证/授权,使用Thymeleaf 2.1.2进行视图层。我正在使用@Secured
注释来控制对控制器的访问。问题是,Thymeleaf在解析sec:authorize-url
属性时会忽略这些注释。有没有人有这方面的工作设置?
我的安全配置如下所示:
<http use-expressions="true" entry-point-ref="authEntryPoint" security-context-repository-ref="sessionRepository">
<intercept-url pattern="/login/**" access="isAnonymous()"/>
<intercept-url pattern="/**" access="hasRole('USER')" />
<custom-filter position="FORM_LOGIN_FILTER" ref="usernamePasswordDomainAuthenticationFilter"/>
<logout logout-url="/logout"/>
</http>
在servlet配置中,有
<security:global-method-security secured-annotations="enabled" />
控制器看起来像这样:
@Secured("ROLE_EXAMPLE")
@Controller
@RequestMapping("/example")
public class ExampleController {
}
我们使用此安装程序,因此安全性可全局保护所有控制器,如果需要,每个控制器(或控制器的方法,如果需要)可以限制访问。
一切正常,没有特定角色的用户无法访问受保护的控制器,thymeleaf-extras-springsecurity4
显然已正确配置,因为sec-authorize="hasRole('EXAMPLE')"
按预期工作(并且需要考虑@Secured
)。
但我觉得在控制器和模板中声明角色很容易出错,所以我宁愿使用sec:authorize-url
。通过调试,我发现它检查了
如果用户hasRole('USER')
,在Security的xml配置文件中声明,但在使用@Secured
时完全忽略sec:authorize-url
注释。在最坏的情况下,我可以在安全性的配置文件中声明所有访问权限,但我更喜欢@Secured
注释。
是否可以使此设置有效?