jsp <security:authorize access="hasPermission,中的hasPermission方法断点只会进入到DenyAllPermissionEvaluator 中,不会进入MyPermissionEvaluator到 中,需要怎么配置xml
时间: 2024-05-03 10:17:25 浏览: 180
如果您的 `hasPermission` 方法只能进入 `DenyAllPermissionEvaluator`,而不是您自定义的 `MyPermissionEvaluator`,可能是因为您没有在 Spring Security 的配置文件中配置正确的 `PermissionEvaluator`。
您需要将 `MyPermissionEvaluator` 注册到 Spring Security 的配置文件中,以便它可以在 `hasPermission` 方法中被正确调用。您可以按照以下步骤进行操作:
1. 创建一个 Spring Security 的配置文件(通常是一个 XML 文件),并在其中注册 `MyPermissionEvaluator`。假设您的配置文件名为 `security-config.xml`,您可以在其中添加以下代码:
```
<beans:bean id="permissionEvaluator" class="com.example.MyPermissionEvaluator"/>
```
这将创建一个名为 `permissionEvaluator` 的 bean,并将其类设置为 `com.example.MyPermissionEvaluator`。
2. 在您的 Spring Security 配置文件中,指定 `hasPermission` 方法使用上面定义的 `permissionEvaluator`。假设您的 `hasPermission` 方法如下:
```
<security:authorize access="hasPermission(someObject, 'read')">
```
您需要将上面的代码更改为:
```
<security:authorize access="hasPermission(#someObject, 'read')">
```
请注意,我们在 `hasPermission` 方法的第一个参数前加上了 `#`,以指示 Spring Security 使用 `permissionEvaluator` 来解析权限表达式。
3. 最后,在您的 Spring Security 配置文件中,指定 Spring Security 使用上面定义的 `permissionEvaluator`。您可以将以下代码添加到您的 Spring Security 配置文件中:
```
<security:global-method-security pre-post-annotations="enabled">
<security:expression-handler ref="expressionHandler"/>
</security:global-method-security>
<beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<beans:property name="permissionEvaluator" ref="permissionEvaluator"/>
</beans:bean>
```
这些配置将启用方法级别的安全性,并将 `permissionEvaluator` 注册为默认的权限解析器。这样,当 `hasPermission` 方法被调用时,Spring Security 将使用您自定义的 `MyPermissionEvaluator` 来解析权限表达式。
希望这可以帮助您解决问题。
阅读全文