怎么配置Xml,的断点一直进入了DenyAllPermissionEvaluator的hasPermission方法
时间: 2024-05-28 14:11:44 浏览: 124
Xml的配置方式可以有很多种,你能否提供更具体的信息,比如你使用的是哪种框架或工具,以及你的Xml配置文件中有哪些内容?
至于你遇到的问题,进入了`DenyAllPermissionEvaluator`的`hasPermission`方法,我猜测可能是你的Xml配置中使用了`<sec:authorize>`标签或类似的标签,而在该标签中使用了`hasPermission`属性,导致进入该方法。`hasPermission`属性是Spring Security用于判断用户是否有某个权限的标准属性之一,当该属性值为一个字符串时,Spring Security会自动调用`hasPermission`方法进行判断,如果该方法返回false,则表示用户没有该权限。
如果你不想进入`DenyAllPermissionEvaluator`的`hasPermission`方法,可以检查一下你的Xml配置文件中是否使用了`hasPermission`属性,如果使用了,可以尝试将其删除或修改为其他的属性。另外,你也可以检查一下`DenyAllPermissionEvaluator`类是否被正确地配置,如果该类的配置有误,也可能导致进入该类的`hasPermission`方法。
相关问题
<security:authorize access="hasPermission 方法,断点一直进入的是DenyAllPermissionEvaluator的hasPermission方法
该问题可能是由于您的安全配置中使用了DenyAllPermissionEvaluator而导致的。DenyAllPermissionEvaluator是一个默认的权限评估器,它会拒绝所有的权限请求。
您可以尝试在您的安全配置中定义一个自定义的PermissionEvaluator,并确保它正确地实现了hasPermission方法。例如,您可以实现一个名为MyPermissionEvaluator的类,并在您的配置中使用它,如下所示:
```
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private MyPermissionEvaluator myPermissionEvaluator;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.accessDecisionManager(accessDecisionManager())
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}
@Bean
public AccessDecisionManager accessDecisionManager() {
List<AccessDecisionVoter<?>> decisionVoters = new ArrayList<>();
decisionVoters.add(new WebExpressionVoter());
decisionVoters.add(new RoleVoter());
decisionVoters.add(new AuthenticatedVoter());
AffirmativeBased accessDecisionManager = new AffirmativeBased(decisionVoters);
accessDecisionManager.setAllowIfAllAbstainDecisions(true);
return accessDecisionManager;
}
@Bean
public DefaultWebSecurityExpressionHandler webSecurityExpressionHandler() {
DefaultWebSecurityExpressionHandler handler = new DefaultWebSecurityExpressionHandler();
handler.setPermissionEvaluator(myPermissionEvaluator);
return handler;
}
}
```
然后,实现您的MyPermissionEvaluator类,确保hasPermission方法返回正确的结果:
```
@Component
public class MyPermissionEvaluator implements PermissionEvaluator {
@Override
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
// 根据您的实际需求实现此方法,返回true或false
return false;
}
@Override
public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
// 根据您的实际需求实现此方法,返回true或false
return false;
}
}
```
注意:在这个例子中,我们将MyPermissionEvaluator声明为一个组件(@Component),这样Spring会自动将它注册到应用程序上下文中。如果您没有声明它为一个组件,请确保它已经在应用程序上下文中注册。
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`方法,查看其中的具体逻辑,找出问题所在。
阅读全文