重写DenyAllPermissionEvaluator 中的hasPermission方法,security.xml该如何配置其才能生效
时间: 2024-05-14 07:18:55 浏览: 138
重写 `DenyAllPermissionEvaluator` 中的 `hasPermission` 方法:
```java
public class CustomPermissionEvaluator extends DenyAllPermissionEvaluator {
@Override
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
// 这里编写自己的权限校验逻辑
return false; // 或者根据自己的逻辑返回 true 或 false
}
}
```
然后在 security.xml 中配置:
```xml
<bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<property name="permissionEvaluator">
<bean class="com.example.CustomPermissionEvaluator" />
</property>
</bean>
```
这样就可以使用自己编写的权限校验逻辑了。
相关问题
如何重写DenyAllPermissionEvaluator 里的hasPermission方法
要重写 `DenyAllPermissionEvaluator` 类中的 `hasPermission` 方法,你需要继承该类并覆盖 `hasPermission` 方法。
以下是一个示例:
```java
public class CustomPermissionEvaluator extends DenyAllPermissionEvaluator {
@Override
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
// 在这里编写自定义的权限检查逻辑
// 返回 true 表示允许访问,返回 false 表示禁止访问
return false;
}
}
```
在上面的示例中,我们创建了一个名为 `CustomPermissionEvaluator` 的类,并覆盖了其中的 `hasPermission` 方法。在该方法中,你可以编写自己的逻辑来决定是否允许访问。如果允许访问,则返回 `true`,否则返回 `false`。
接下来,你需要告诉 Spring Security 使用你的自定义权限评估器。你可以在 Spring Security 的配置文件中添加以下代码:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public DefaultMethodSecurityExpressionHandler methodSecurityExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(new CustomPermissionEvaluator()); // 设置自定义权限评估器
return expressionHandler;
}
}
```
在上面的示例中,我们创建了一个名为 `methodSecurityExpressionHandler` 的 bean,并设置了其中的权限评估器为 `CustomPermissionEvaluator`。这样,Spring Security 就会使用我们自定义的权限评估器来进行权限检查了。
怎么配置Xml,的断点一直进入了DenyAllPermissionEvaluator的hasPermission方法
Xml的配置方式可以有很多种,你能否提供更具体的信息,比如你使用的是哪种框架或工具,以及你的Xml配置文件中有哪些内容?
至于你遇到的问题,进入了`DenyAllPermissionEvaluator`的`hasPermission`方法,我猜测可能是你的Xml配置中使用了`<sec:authorize>`标签或类似的标签,而在该标签中使用了`hasPermission`属性,导致进入该方法。`hasPermission`属性是Spring Security用于判断用户是否有某个权限的标准属性之一,当该属性值为一个字符串时,Spring Security会自动调用`hasPermission`方法进行判断,如果该方法返回false,则表示用户没有该权限。
如果你不想进入`DenyAllPermissionEvaluator`的`hasPermission`方法,可以检查一下你的Xml配置文件中是否使用了`hasPermission`属性,如果使用了,可以尝试将其删除或修改为其他的属性。另外,你也可以检查一下`DenyAllPermissionEvaluator`类是否被正确地配置,如果该类的配置有误,也可能导致进入该类的`hasPermission`方法。
阅读全文