JSP使用<security:authorize access="hasPermission('read','formDialog:edit')">后,断点一直进的是DenyAllPermissionEvaluator的hasPermission方法
时间: 2024-05-22 07:11:56 浏览: 9
这个问题可能是由于权限不正确导致的。在JSP中,<security:authorize> 标记用于授权访问某些内容。在这种情况下,你使用了权限表达式 "hasPermission('read','formDialog:edit')",这表明用户需要拥有 "read" 权限来访问 "formDialog:edit" 的内容。
你可以尝试检查以下几个方面:
1. 确保你已经正确地配置了 Spring Security,并且你已经在 Spring Security 中为 "read" 权限授予了访问权限。
2. 确保你已经正确地配置了权限检查器,并且它能够正确地解析权限表达式。
3. 确保你已经正确地配置了角色和用户,并且用户拥有 "read" 权限。
如果你已经检查了以上几点,但是仍然无法解决问题,那么你可以尝试添加一些日志来了解更多信息,例如,在 DenyAllPermissionEvaluator 类的 hasPermission 方法中添加一些调试输出,以确定哪些权限被拒绝了。
相关问题
Jsp配置了<security:authorize access="hasPermission('read','formDialog:edit')">后,断点一直进的是DenyAllPermissionEvaluator的hasPermission方法
如果你的JSP配置了`<security:authorize>`标签,并且指定了`access`属性为`hasPermission('read','formDialog:edit')`,那么在运行时Spring Security会调用`hasPermission`方法来检查当前用户是否有权限访问该资源。
如果你的断点一直进入了`DenyAllPermissionEvaluator`的`hasPermission`方法,那么可能是因为你的权限配置有问题。`DenyAllPermissionEvaluator`是Spring Security提供的一个权限评估器,它会始终返回false,即拒绝所有请求。这意味着你的Spring Security配置中没有任何授权规则,或者授权规则配置有误。
你需要检查一下你的Spring Security配置,确保已经正确地配置了授权规则,并且当前用户具有访问该资源的权限。你也可以尝试调试`hasPermission`方法,查看其中的具体逻辑,找出问题所在。
security.xml重写SecurityExpressionRoot 方法 ,是jsp 可以使用<security:authorize access="hasPermission('formDialog:edit')">调用,只传一个参数
首先需要明确的是,`SecurityExpressionRoot`是Spring Security中的一个类,用于在访问控制表达式中提供一些基础的安全方法和属性。而`security.xml`是Spring Security的配置文件,用于配置安全相关的参数。
在`SecurityExpressionRoot`中,有一个`hasPermission`方法,用于判断当前用户是否拥有指定的权限。如果想要重写这个方法,可以创建一个自定义的`SecurityExpressionRoot`子类,并重写`hasPermission`方法。例如:
```java
public class CustomSecurityExpressionRoot extends SecurityExpressionRoot {
public CustomSecurityExpressionRoot(Authentication authentication) {
super(authentication);
}
public boolean hasPermission(String permission) {
// 自定义权限判断逻辑
}
}
```
然后,在配置文件中,需要将`securityExpressionHandler`指定为自定义的`DefaultWebSecurityExpressionHandler`子类,并在该子类中设置上述自定义的`CustomSecurityExpressionRoot`。例如:
```xml
<security:http>
<security:intercept-url pattern="/formDialog/**" access="hasPermission('formDialog:edit')"/>
<security:expression-handler ref="customSecurityExpressionHandler"/>
</security:http>
<bean id="customSecurityExpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler">
<property name="permissionEvaluator" ref="customPermissionEvaluator"/>
<property name="rootObjectFactory" ref="customSecurityExpressionRootFactory"/>
</bean>
<bean id="customPermissionEvaluator" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<property name="permissionCacheOptimizer">
<bean class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler$1"/>
</property>
</bean>
<bean id="customSecurityExpressionRootFactory" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionRootFactory">
<constructor-arg ref="customPermissionEvaluator"/>
</bean>
```
最后,在JSP页面中,可以使用`<security:authorize>`标签来根据权限判断是否显示某个内容。例如:
```jsp
<security:authorize access="hasPermission('formDialog:edit')">
<a href="/formDialog/edit">Edit Form Dialog</a>
</security:authorize>
```
需要注意的是,`hasPermission`方法只接受一个参数,即权限表达式。如果需要传递更多的参数,可以在自定义`CustomSecurityExpressionRoot`类中新增方法,并在表达式中调用该方法。例如:
```java
public class CustomSecurityExpressionRoot extends SecurityExpressionRoot {
public CustomSecurityExpressionRoot(Authentication authentication) {
super(authentication);
}
public boolean hasPermission(String formId, String permission) {
// 自定义权限判断逻辑,根据formId和permission判断是否有权限
}
}
```
然后,在JSP页面中,可以使用如下表达式:
```jsp
<security:authorize access="hasPermission(formId, 'edit')">
<a href="/formDialog/edit">Edit Form Dialog</a>
</security:authorize>
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)