Thymeleaf 和 Spring 安全 - 自定义 SpEL 表达式
Thymelaf and Spring Security - custom SpEL expression
我正在使用具有 spring 安全性的 Thymeleaf。
在 html 代码中,我正在检查用户角色:
<li class="has-sub" sec:authorize="hasRole('ROLE_ADMIN')">
</li>
但在 spring 我实现了自己的 CustomSecurityExpressionRoot
所以我可以在控制器中使用
@PreAuthorize("hasAccess('PERMISSION')")
可以连接 Thymeleaf 以使用我的 CustomSecurityExpressionRoot
?
中的 hasAccess
(和其他)方法
我会把逻辑放在单例中 Spring bean:
@Component
public class AccessEvaluator {
public boolean hasAccess(Authentication authentication, String permission) {
// implementation
}
}
然后在 Thymeleaf 代码中:
<li th:if="${@accessEvaluator.hasAccess(#request.userPrincipal, 'PERMISSION')}">
</li>
我使用了与发布的答案类似的方法来获得身份验证:
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>
我正在使用具有 spring 安全性的 Thymeleaf。 在 html 代码中,我正在检查用户角色:
<li class="has-sub" sec:authorize="hasRole('ROLE_ADMIN')">
</li>
但在 spring 我实现了自己的 CustomSecurityExpressionRoot
所以我可以在控制器中使用
@PreAuthorize("hasAccess('PERMISSION')")
可以连接 Thymeleaf 以使用我的 CustomSecurityExpressionRoot
?
hasAccess
(和其他)方法
我会把逻辑放在单例中 Spring bean:
@Component
public class AccessEvaluator {
public boolean hasAccess(Authentication authentication, String permission) {
// implementation
}
}
然后在 Thymeleaf 代码中:
<li th:if="${@accessEvaluator.hasAccess(#request.userPrincipal, 'PERMISSION')}">
</li>
我使用了与发布的答案类似的方法来获得身份验证:
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>