【发布时间】:2021-02-23 23:43:14
【问题描述】:
我有一个控制器和百里香模板。两者都包含对 Spring Security 角色的限制。我不喜欢我在两个地方写这些角色的事实。我可以在一次复仇中编写一系列角色并使用它吗?我试图通过枚举来做
@RolesAllowed(ALLOWED_ROLES)
和
public static final String[] ALLOWED_ROLES = {Role.ADMIN.toString(), Role.EDITOR.toString()};
,但编译器需要一个常量 (Use Enum type as a value parameter for @RolesAllowed-Annotation)。是否有一些很好的解决方案可以在一个地方描述允许的角色?
控制器:
@Controller
@RolesAllowed({"ROLE_ADMIN", "ROLE_EDITOR"})
public class MenuEditorController {
...
}
百里香:
<ul th:fragment = "nav-default">
<li><a th:href="@{/}">Home</a></li>
<li sec:authorize="hasAnyRole('ROLE_ADMIN', 'ROLE_EDITOR')"><a th:href="@{/admin/menu}">menu editor</a></li>
</ul>
角色枚举:
public enum Role implements GrantedAuthority {
ADMIN,
EDITOR,
CONSULTANT,
CLIENT;
@Override
public String getAuthority() {
return "ROLE_" + name();
}
}
【问题讨论】:
标签: spring spring-security thymeleaf