jsp 页面<security:authorize access="@myHasPermission()"> myHasPermission无法跳转到具体的方法
时间: 2023-06-17 20:08:38 浏览: 111
jsp实现页面跳转的方法
`@myHasPermission()` 是一个 Spring Security 中的 SpEL 表达式,它用于检查当前用户是否有特定权限来访问页面或资源。在这个表达式中,`myHasPermission` 是一个自定义的方法名,用于检查当前用户是否有特定权限。
要使 `@myHasPermission()` 能够正确地跳转到具体的方法,需要在 Spring Security 配置文件中对其进行定义。具体来说,需要定义一个 `MethodSecurityExpressionHandler` Bean,并将其与 `GlobalMethodSecurityConfiguration` 配置类关联起来,如下所示:
```java
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(new CustomPermissionEvaluator());
return expressionHandler;
}
}
```
在上面的配置中,`DefaultMethodSecurityExpressionHandler` 是 Spring Security 默认的表达式处理器,`CustomPermissionEvaluator` 是自定义的权限检查器,用于实现 `myHasPermission` 方法的具体逻辑。在 `CustomPermissionEvaluator` 中,需要实现 `hasPermission` 方法,用于检查当前用户是否有特定权限。例如:
```java
public class CustomPermissionEvaluator implements PermissionEvaluator {
@Autowired
private UserService userService;
@Override
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
User user = userService.getCurrentUser();
String permissionStr = permission.toString();
// 根据 permissionStr 判断用户是否有特定权限
return user.hasPermission(permissionStr);
}
@Override
public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
// 这个方法一般用于检查某个实体对象是否有特定权限
return false;
}
}
```
在 `hasPermission` 方法中,首先获取当前用户,然后根据传入的 `permission` 参数进行判断,判断用户是否有特定的权限。如果有,则返回 `true`,否则返回 `false`。
在上面的配置完成后,`@myHasPermission()` 应该就能够正确地跳转到具体的方法了。
阅读全文