Spring security method 方法级别的权限控制
By:Roy.LiuLast updated:2015-11-17
以前用spring security 做过url级别的权限控制,但一些简单的应用应该可以满足了,一些复杂的应用,权限是到方法级别的。花了一点时间看了一下,要做到method级别的控制通过简单的配置也可以做到.
1. 首先得修改 配置文件, 比如spring-security.xml。允许 @PreAuthorize和@PostAuthorize注解.
这些注解接受一个参数,要么是角色名称,要么是表达式. 如果你设置的是 use-expression 为 true , 将会采用表达式. 否则将会直接用 角色名称.
2. 在要保护的方法上加上注解
3. 运行程序,登陆测试。
如果是普通用户登陆,添加用户,报错 403 没有权限
如果是管理员登陆之后,就可以正常添加用户.
例子用到的数据脚本如下:
程序代码demo 下载:
spring security method demo download
1. 首先得修改 配置文件, 比如spring-security.xml。允许 @PreAuthorize和@PostAuthorize注解.
这些注解接受一个参数,要么是角色名称,要么是表达式. 如果你设置的是 use-expression 为 true , 将会采用表达式. 否则将会直接用 角色名称.
2. 在要保护的方法上加上注解
... @Repository public class EmployeeDaoImpl implements EmployeeDAO { @Autowired private SessionFactory sessionFactory; // 注意这里方法保护,按角色. @PreAuthorize("hasRole('ROLE_ADMIN')") @Override public void addEmployee(EmployeeEntity employee) { //System.out.println(((User)SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getAuthorities()); this.sessionFactory.getCurrentSession().save(employee); } @SuppressWarnings("unchecked") @Override public ListgetAllEmployees() { return this.sessionFactory.getCurrentSession().createQuery("from Employee").list(); } ...
3. 运行程序,登陆测试。
如果是普通用户登陆,添加用户,报错 403 没有权限
如果是管理员登陆之后,就可以正常添加用户.
例子用到的数据脚本如下:
Create TABLE `employee` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `FIRSTNAME` varchar(30) DEFAULT NULL, `LASTNAME` varchar(30) DEFAULT NULL, `TELEPHONE` varchar(15) DEFAULT NULL, `EMAIL` varchar(30) DEFAULT NULL, `CreateD` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
程序代码demo 下载:
spring security method demo download
From:一号门
Previous:Django 中文手册 chm 文档, 供下载参考
COMMENTS