我将Spring Security添加到一个Spring项目中.系统的体系结构是REST,用户可以访问不同的资源.
我想向拥有此信息的管理员和用户提供个人信息访问权限.我已经开始简单:过滤用户配置文件,如下所示:
在我的服务层中,我想使用方法注释并包含方法参数.
@PreAuthorize("hasRole('ROLE_ADMIN') or principal.userId == #id")
public Usuario getUser(int id) throws DAOException {
...
}
Run Code Online (Sandbox Code Playgroud)
但这根本不起作用.当请求此URL时,任何用户都可以看到所有配置文件(管理员和所有用户)(Web层):
@RequestMapping(value="/user/{uid}", method=RequestMethod.GET)
public ModelAndView getUser(@PathVariable int uid) throws DAOException {
userDAO = new UsuarioJPADAO();
userService.setUsuarioDAO(userDAO);
return new ModelAndView("user", "user", userService.getUser(uid));
}
Run Code Online (Sandbox Code Playgroud)
这是我的 security.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<!-- Security Annotations -->
<global-method-security
pre-post-annotations="enabled"/>
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/css/**" access="permitAll" />
<intercept-url pattern="/images/**" access="permitAll" />
<intercept-url pattern="/js/**" access="permitAll" />
<intercept-url …Run Code Online (Sandbox Code Playgroud) 我有项目是iam spring security 3.1.3和mvc 3.2
我想要允许路径中的userid中的url wehen匹配主要用户ID
<security:intercept-url pattern="/user/{id}/edit" access="#id == principal.userId"/>
Run Code Online (Sandbox Code Playgroud)
http use-expressions设置为true,当try principal.userId == 1时它可以工作,但我需要使用url中提取的值.
我已经尝试了所有可能的组合.