Spring security method 方法级别的权限控制

摘要: 以前用spring security 做过url级别的权限控制,但一些简单的应用应该可以满足了,一些复杂的应用,权限是到方法级别的。花了一点时间看了一下,要做到method级别的控制通过简单的配置也可以做到.

以前用spring security 做过url级别的权限控制,但一些简单的应用应该可以满足了,一些复杂的应用,权限是到方法级别的。花了一点时间看了一下,要做到method级别的控制通过简单的配置也可以做到.

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 List getAllEmployees() {
        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

上一篇: Django 中文手册 chm 文档, 供下载参考
下一篇: 同时绑定 spring validator和hibernate validator作为校验
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号