- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
请引用为什么我的 @PreAuthorize("hasPermission(#user,'write')") 不起作用的真正问题
基本上我正在尝试检查普通用户
我的 Controller 类
package com.***.appconfig.controller;
import com.***.appconfig.dao.UserDaoImplementation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.***.appconfig.model.User;
import com.***.appconfig.security.CustomPermissionEvaluator;
@Controller
public class CheckPermissionController {
public static User user = new User();
UserDaoImplementation userDao = new UserDaoImplementation();
Boolean directPermission = false;
CustomPermissionEvaluator customPermissionEvaluator = new CustomPermissionEvaluator();
@RequestMapping("/checkPermission")
protected ModelAndView direct() throws Exception {
System.out.println("in direct");
user.setUserName("andrew");
userDao.addListValues(user);
System.out.println("before assign");
directPermission = userDao.assignUser(user);
System.out.print("after assign");
if (directPermission) {
return new ModelAndView("checkPermission");
} else {
return new ModelAndView("login");
}
}
}
这是我的道
import com.***.appconfig.model.User;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@Component
public class UserDaoImplementation implements UserDao {
@Override
public User addListValues(User user) {
HashMap < String, String > permissionList = new HashMap < String, String > ();
permissionList.put("server", "write");
user.setPermissionList(permissionList);
return null;
}
@PreAuthorize("hasPermission(#user,'write')")
public Boolean assignUser(User user) {
System.out.println("in assign");
return true;
}
}
这是我的 CustomPermissionEvaluator
package com.***.appconfig.security;
import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.core.Authentication;
import com.***.appconfig.controller.CheckPermissionController;
import com.***.appconfig.model.User;
import com.***.appconfig.dao.UserDaoImplementation;
import java.io.Serializable;
import java.util.HashMap;
public class CustomPermissionEvaluator implements PermissionEvaluator {
public static User user;
public UserDaoImplementation userDao;
@Override
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
setPermissions();
String targetType = targetDomainObject.getClass().getSimpleName().toUpperCase();
HashMap < String, String > permissionList = user.getPermissionList();
System.out.print("before check");
if (permissionList.containsValue("write")) {
System.out.print("success check");
hasPermission = true;
}
return hasPermission;
}
@Override
public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
Boolean hasPermission = false;
return hasPermission;
}
public void setPermissions() {
user.setUserName("andrew");
userDao.addListValues(user);
}
}
我创建了一个重复的用户对象,以便动态填充 PermissionEvaluator。hasPermission() 覆盖未被调用。
这是我的 spring-security.xml
<http auto-config="true">
<access-denied-handler error-page="/403page" />
<intercept-url pattern="/user" access="ROLE_USER" />
<intercept-url pattern="/admin" access="ROLE_ADMIN" />
<form-login login-page='/login' username-parameter="username" password-parameter="password" default-target-url="/user" authentication-failure-url="/login?authfailed" />
<logout logout-success-url="/login?logout" />
</http>
<global-method-security pre-post-annotations="enabled" secured-annotations="enabled">
<expression-handler ref="expressionHandler" />
</global-method-security>
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource" users-by-username-query="select username,password, enabled from users where username=?" authorities-by-username-query="select username, role from user_roles where username =? " />
</authentication-provider>
</authentication-manager>
<beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<beans:property name="permissionEvaluator" ref="permissionEvaluator" />
</beans:bean>
<beans:bean name="permissionEvaluator" class="com.coolminds.appconfig.security.CustomPermissionEvaluator" />undefined</beans:beans>
最佳答案
您的 Controller 类应该注入(inject)所有依赖项,以确保 Spring 可以创建适当的代理对象:
package com.***.appconfig.controller;
import com.***.appconfig.dao.UserDaoImplementation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.***.appconfig.model.User;
@Inject
UserDao userDao;
@Controller
public class CheckPermissionController {
@RequestMapping("/checkPermission")
protected ModelAndView direct() throws Exception {
User user = new User();
boolean directPermission = false;
System.out.println("in direct");
user.setUserName("andrew");
userDao.addListValues(user);
System.out.println("before assign");
directPermission = userDao.assignUser(user);
System.out.print("after assign");
if (directPermission) {
return new ModelAndView("checkPermission");
} else {
return new ModelAndView("login");
}
}
}
关于java - Spring Security 中的 hasPermission() 不会调用自定义 PermissionEvaluator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41998789/
在我的 spring 应用程序中,我在 Controller /服务类的方法和 jsp 页面中使用 hasPermission 来确定 suer 可以访问的内容。我的用途是这样的: 在类里面: @Pr
我正在尝试利用 servicestack 的身份验证和授权功能,这样我就不需要用它来污染我的服务代码,这应该会导致更清晰的测试等。 在我的应用程序中,用户有权在特定上下文中执行某些操作。 即用户只能查
我正在尝试将 Spring Security 3 与 Struts 2 和 Spring DI 结合使用。我在我的代码中放置了 hasRole() 注释,它工作正常,但 hasPermission()
我正在尝试为我的 discord 机器人发出一个警告命令,但我为非管理员创建的系统无法使用它,因为 msg.guildmember.haspermission 事情。我不确定出了什么问题,有人可以帮我
我收到错误:TypeError: MOD.hasPermissions is not a function! 你能帮帮我吗? const commando = require('discord.js-
我正在尝试将 Spring Security 集成到我的 Spring Web 应用程序中。基本上我需要根据用户权限隐藏一些菜单。这是我所做的。 我在类路径下添加了 JARS。 spring-secu
这实际上是两个问题,因为它在 Spring Security 引用资料中没有得到很好的解释。第一个问题是,在我的配置中,我有这样的代码: @Override protected void confi
我正在使用标签 在我的 JSP 的不同位置根据当前用户拥有的权限显示或隐藏内容。 但是,有时我需要组合权限,例如 或 我该怎么做?我可以使用 hasPermission 吗? 标签? shiro
我正在尝试注释 Spring Data Repository findAll()具有自定义的方法 @Query注解。我想使用 Spring Security hasPermission() where
当用户在获得 HTTP 500 后无法看到页面(当没有特定权限时)时如何显示自定义错误页面 - org.springframework.security.access.AccessDeniedExce
我正在尝试实现一个通用 Controller 类,其中每个方法都有与此类似的结构: @RequestMapping(value="cadastra") @PreAuthorize("hasPermis
我有很多方法必须用这个注释来注释: @Override @PostAuthorize("hasPermission(returnObject.id, 'mypackage.SecuredClazz',
我的工作应用程序受到方法级安全性的保护: RestController: @PreAuthorize("hasPermission(#product, 'WRITE')") @RequestMappi
我遇到了一个问题,SpEL 在这个存储库的第二种方法中将实体参数评估为空引用。第一种方法效果很好,并且 id 被正确评估为 Long 应该是。 @NoRepositoryBean public int
请引用为什么我的 @PreAuthorize("hasPermission(#user,'write')") 不起作用的真正问题 基本上我正在尝试检查普通用户 我的 Controller 类 pack
我正在尝试在我的spring项目的jsp页面中使用hasPermission。我已经在我的 Controller /服务类的方法中毫无问题地使用它。阅读文章: http://docs.spring.i
有没有办法直接从我的代码检查我的类对象权限,而不是使用注释模型, @PostAuthorize("hasPermission(returnObject, 'WRITE')") public BaseD
下面两行的行为是否相同? @PreAuthorize("hasPermission(#task, 'MANAGER') @PreAuthorize("hasPermission(#task, 'man
我和我的 friend 正在尝试制作一个 Discord 机器人。我们目前正在尝试发出踢球命令。但是,当我们尝试踢掉没有 Angular 色且只有基本权限的成员时,它不起作用,并且 Repl.it 控
如何仅使用一个参数调用 hasPermission 函数? 目前我有这样的东西: @PreAuthorize("hasPermission('someResource', 'READ')") 我希望能
我是一名优秀的程序员,十分优秀!