这怎么可能创建自己的网络的安全性表达,这样我就可以像JSP文件中使用它:
<sec:authorize access="isOwner()"> some content here </sec:authorize>
这怎么可能创建自己的网络的安全性表达,这样我就可以像JSP文件中使用它:
<sec:authorize access="isOwner()"> some content here </sec:authorize>
以下是你需要什么。 按照下面创建自定义规划环境地政司表示:
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()">
我建议你使用Shiro
框架。
官方链接: http://shiro.apache.org /
实施AuthorizingRealm
与extends
,然后加入了安全控制的表达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>