JSP使用<security:authorize access="hasPermission('read','formDialog:edit')">后,断点一直进的是DenyAllPermissionEvaluator的hasPermission方法
时间: 2024-06-05 13:10:27 浏览: 134
这个问题可能是由于没有正确配置访问控制表达式的原因导致的。在使用`<security:authorize>`标记时,需要使用Spring Security提供的表达式语言来定义授权规则。
在这种情况下,你需要检查以下几点:
1. 确保正确配置了Spring Security,包括正确配置了`<security:http>`和`<security:global-method-security>`。
2. 确保你使用的是正确的授权表达式。在这里,你使用的是`hasPermission`,这是Spring Security中的一个内置表达式,用于检查用户是否有访问某个资源的权限。你需要确定你的权限表达式是否正确。
3. 确保你已经在你的应用程序中定义了适当的权限。在这种情况下,你使用的是`read`和`formDialog:edit`,这些应该在你的应用程序中定义为权限,以便Spring Security可以在运行时检查它们。
如果你已经检查了以上几点,但问题仍然存在,那么你可以尝试在调试过程中打印出调试信息,以便更好地理解问题的根本原因。
相关问题
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: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会自动将它注册到应用程序上下文中。如果您没有声明它为一个组件,请确保它已经在应用程序上下文中注册。
阅读全文