我使用Thymeleaf进行弹簧安全保护。 在html代码中,我正在检查用户角色:
<li class="has-sub" sec:authorize="hasRole('ROLE_ADMIN')">
</li>
但是在春天我实现了自己的CustomSecurityExpressionRoot
,所以我可以在控制器中使用例如
@PreAuthorize("hasAccess('PERMISSION')")
可以连接Thymeleaf以便能够使用hasAccess
中的CustomSecurityExpressionRoot
(及其他)方法吗?
答案 0 :(得分:2)
我会把逻辑放在一个单独的Spring bean中:
@Component
public class AccessEvaluator {
public boolean hasAccess(Authentication authentication, String permission) {
// implementation
}
}
然后在Thymeleaf代码:
<li th:if="${@accessEvaluator.hasAccess(#request.userPrincipal, 'PERMISSION')}">
</li>
答案 1 :(得分:1)
我使用了与发布的答案类似的方式进行身份验证:
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
@Component
public class AccessEvaluator {
public boolean hasAccess(String pageName) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
return ((MyUserPrincipal) auth.getPrincipal()).getAccessOnPage(pageName);
}
}
并按如下所示调用它:
<li th:if="${@accessEvaluator.hasAccess('ACT')}" >
<p> I have access on ACT page </p>
</li>