THE*_*all 3 java spring-mvc spring-security
如何创建您自己的 Web 安全表达式,以便我能够在 JSP 文件中使用它,例如:
<sec:authorize access="isOwner()"> some content here </sec:authorize>
Run Code Online (Sandbox Code Playgroud)
这就是您所需要的。请按照以下步骤创建自定义 SpEL 表达式:
1) 创建WebSecurityExpressionRoot类的自定义子类。在此子类中创建一个将在表达式中使用的新方法。例如:
public class CustomWebSecurityExpressionRoot extends WebSecurityExpressionRoot {
public CustomWebSecurityExpressionRoot(Authentication a, FilterInvocation fi) {
super(a, fi);
}
public boolean yourCustomMethod() {
boolean calculatedValue = ...;
return calculatedValue;
}
}Run Code Online (Sandbox Code Playgroud)
2) 创建DefaultWebSecurityExpressionHandler类的自定义子类并覆盖其中的方法createSecurityExpressionRoot(Authenticationauthentication, FilterInitation fi)(不是 createEvaluationContext(...)) 以返回 CustomWebSecurityExpressionRoot实例。例如:
@Component(value="customExpressionHandler")
public class CustomWebSecurityExpressionHandler extends DefaultWebSecurityExpressionHandler {
@Override
protected SecurityExpressionRoot createSecurityExpressionRoot(
Authentication authentication, FilterInvocation fi) {
WebSecurityExpressionRoot expressionRoot = new CustomWebSecurityExpressionRoot(authentication, fi);
return expressionRoot;
}}Run Code Online (Sandbox Code Playgroud)
3) 在 spring-security.xml 中定义对表达式处理程序 bean 的引用
<security:http access-denied-page="/error403.jsp" use-expressions="true" auto-config="false">
...
<security:expression-handler ref="customExpressionHandler"/>
</security:http>
Run Code Online (Sandbox Code Playgroud)
之后,您可以使用自己的自定义表达式而不是标准表达式:
<security:authorize access="yourCustomMethod()">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |