如何创建自定义Web安全表达JSP使用?(How to create custom web secu

2019-11-05 04:29发布

这怎么可能创建自己的网络的安全性表达,这样我就可以像JSP文件中使用它:

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

Answer 1:

以下是你需要什么。 按照下面创建自定义规划环境地政司表示:

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(验证认证,FilterInvocation 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)在弹簧的security.xml基准定义到表达式处理器豆

<security:http access-denied-page="/error403.jsp" use-expressions="true" auto-config="false">
    ...

    <security:expression-handler ref="customExpressionHandler"/>
</security:http>

在此之后,你可以使用自己定制的表达,而不是标准之一:

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


Answer 2:

我建议你使用Shiro框架。
官方链接: http://shiro.apache.org /
实施AuthorizingRealmextends ,然后加入了安全控制的表达doGetAuthorizationInfo(...)
在JSP中,先加四郎的JSP标签库,官方链接: http://shiro.apache.org/web.html#Web-taglibrary

使用<shiro:hasPermission name="...">...</shiro:hasPermission>可以控制你需要的东西。 name属性将与你在设置比较表达式AuthorizingRealm

下面是允许表达指南: http://shiro.apache.org/permissions.html

下面是一些使用:

<%@ taglib prefix="shiro" uri=http://shiro.apache.org/tags %>
<html>
<body>
    <shiro:hasPermission name="users:manage">
        <a href="manageUsers.jsp">
            Click here to manage users
        </a>
    </shiro:hasPermission>
    <shiro:lacksPermission name="users:manage">
        No user management for you!
    </shiro:lacksPermission>
</body>
</html>


文章来源: How to create custom web security expression to use in JSP?