gpt4 book ai didi

java - 如何创建自定义 Web 安全表达式以在 JSP 中使用?

转载 作者:行者123 更新时间:2023-12-02 10:48:37 27 4
gpt4 key购买 nike

如何创建您自己的 Web 安全表达式,以便我能够在 JSP 文件中使用它,例如:

<sec:authorize access="isOwner()"> some content here </sec:authorize>

最佳答案

这就是您所需要的。请按照以下步骤创建自定义 SpEL 表达式:

1) 创建 WebSecurityExpressionRoot 类的自定义子类。在此子类中创建一个将在表达式中使用的新方法。例如:

public class CustomWebSecurityExpressionRoot extends WebSecurityExpressionRoot {

public CustomWebSecurityExpressionRoot(Authentication a, FilterInvocation fi) {
super(a, fi);
}

public boolean yourCustomMethod() {
boolean calculatedValue = ...;

return calculatedValue;

}
}

2) 创建 DefaultWebSecurityExpressionHandler 类的自定义子类并重写方法 createSecurityExpressionRoot(Authenticationauthentication, FilterInvocal 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;
}}

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>

此后,您可以使用自己的自定义表达式来代替标准表达式:

<security:authorize access="yourCustomMethod()">

关于java - 如何创建自定义 Web 安全表达式以在 JSP 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52358839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com