快速业务通道

Spring Security 2配置精讲 上 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
Y KEY  (`role_id`,`resource_id`),   KEY `FKAEE599B751827FA1` (`role_id`),   KEY `FKAEE599B7EFD18D21` (`resource_id`),   CONSTRAINT `FKAEE599B751827FA1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`),   CONSTRAINT `FKAEE599B7EFD18D21` FOREIGN KEY (`resource_id`) REFERENCES `resource` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `role` (   `id` int(11) NOT NULL auto_increment,   `name` varchar(255) default NULL,   `description` varchar(255) default NULL,   PRIMARY KEY  (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `resource` (   `id` int(11) NOT NULL auto_increment,   `type` varchar(255) default NULL,   `value` varchar(255) default NULL,   PRIMARY KEY  (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `role_resource` (   `role_id` int(11) NOT NULL,   `resource_id` int(11) NOT NULL,   PRIMARY KEY  (`role_id`,`resource_id`),   KEY `FKAEE599B751827FA1` (`role_id`),   KEY `FKAEE599B7EFD18D21` (`resource_id`),   CONSTRAINT `FKAEE599B751827FA1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`),   CONSTRAINT `FKAEE599B7EFD18D21` FOREIGN KEY (`resource_id`) REFERENCES `resource` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在这里Resource可能分成多种类型,比如MENU,URL,METHOD等等。

Spring Security 2配置精讲 上(12)

时间:2011-10-16

针对资源的认证

针对资源的认证,实际上应该由Spring Security中的FilterSecurityInterceptor这个过滤器来完成。不过内置的FilterSecurityInterceptor的实现往往无法满足我们的要求,所以传统的Acegi的方式,我们往往会替换FilterSecurityInterceptor的实现,从而对URL等资源进行认证。

不过在Spring Security中,由于默认的拦截器链内置了FilterSecurityInterceptor,而且上面我们也提到过,这个实现无法被替换。这就使我们犯了难。我们如何对资源进行认证呢?

实际上,我们虽然无法替换FilterSecurityInterceptor的默认实现,不过我们可以再实现一个类似的过滤器,并将我们自己的过滤器作为一个customer-filter,加到默认的过滤器链的最后,从而完成整个过滤检查。

接下来我们就来看看一个完整的例子:

1. 建立权限(Role)和资源(Resource)之间的关联关系

修改上面的权限(Role)的Entity定义:

Java代码

1.@Entity 2.@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 3.public class Role { 4. 5.    @Id 6.    @GeneratedValue  7.    private Integer id; 8. 9.    private String name; 10. 11.    @ManyToMany(targetEntity = Resource.class, fetch = FetchType.EAGER) 12.    @JoinTable(name = "role_resource", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "resource_id")) 13.    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 14.    private Set<Resource> resources; 15. 16.        // setters and getter 17.} 18. 19.@Entity 20.@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 21.public class Role { 22. 23. @Id 24. @GeneratedValue 25. private Integer id; 26. 27. private String name; 28. 29. @ManyToMany(targetEntity = Resource.class, fetch = FetchType.EAGER) 30.    @JoinTable(name = "role_resource", joinColum

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号