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

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

1. 首先得修改 配置文件, 比如spring-security.xml。允许  @PreAuthorize和@PostAuthorize注解.
程序代码 程序代码

<global-method-security pre-post-annotations="enabled" />


这些注解接受一个参数,要么是角色名称,要么是表达式. 如果你设置的是 use-e­xpression 为 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<EmployeeEntity> 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


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: spring security method 方法级别的权限控制
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.