怎么让JSP 页面配置<security:authorize access="has('formDialog:edit')">,怎么配置access方法为自定义方法
时间: 2023-06-18 17:06:47 浏览: 161
在 JSP 页面中使用 `security:authorize` 标签需要配置 Spring Security 的支持,具体步骤如下:
1. 在 `web.xml` 中配置 Spring Security 的过滤器。
```
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
2. 在 Spring Security 的配置文件中配置相关的权限控制规则。
```
<http>
<intercept-url pattern="/edit/**" access="hasRole('ROLE_ADMIN')" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="admin" password="admin" authorities="ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
```
3. 在 JSP 页面中使用 `security:authorize` 标签进行权限控制。
```
<security:authorize access="hasRole('ROLE_ADMIN')">
<a href="/edit">Edit</a>
</security:authorize>
```
如果需要自定义方法作为 `access` 参数,可以在 Spring Security 的配置文件中创建一个自定义的表达式,例如:
```
<bean id="customExpressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<property name="permissionEvaluator" ref="customPermissionEvaluator"/>
</bean>
<bean id="customPermissionEvaluator" class="com.example.CustomPermissionEvaluator"/>
<global-method-security pre-post-annotations="enabled" expression-handler-ref="customExpressionHandler"/>
```
其中 `com.example.CustomPermissionEvaluator` 是自定义的权限判断类,可以在该类中定义自己的权限判断方法。例如:
```
public class CustomPermissionEvaluator implements PermissionEvaluator {
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
if (targetDomainObject instanceof FormDialog && "edit".equals(permission)) {
return hasEditPermission(authentication, (FormDialog) targetDomainObject);
}
return false;
}
private boolean hasEditPermission(Authentication authentication, FormDialog formDialog) {
// 自定义权限判断逻辑
}
}
```
然后在 JSP 页面中使用自定义的权限判断方法:
```
<security:authorize access="@customPermissionEvaluator.hasPermission(authentication, formDialog, 'edit')">
<a href="#">Edit</a>
</security:authorize>
```
阅读全文