快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
rce-ref="dataSource"     users-by-username-query="SELECT U.username, U.password, U.accountEnabled AS ''enabled'' FROM User U where U.username=?"     authorities-by-username-query="SELECT U.username, R.name as ''authority'' FROM User U JOIN Authority A ON u.id = A.userId JOIN Role R ON R.id = A.roleId WHERE U.username=?"/> </authentication-provider>

这里给出的是一个使用SQL进行模拟用户和权限的示例。其中你需要为运行SQL准备相应的dataSource。这个dataSource应该对应于Spring中的某个bean的定义。

从这段配置模拟用户和权限的情况来看,实际上Spring Security对于用户,需要username,password,accountEnabled三个字段。对于权限,它需要的是username和authority2个字段。

也就是说,如果我们能够通过其他的方式,模拟上面的这些对象,并插入到Spring Security中去,我们同样能够实现用户和权限的认证。接下来,我们就来看看我们如何通过自己的实现,来完成这件事情。

通过扩展Spring Security的默认实现来进行用户和权限的管理

事实上,Spring Security提供了2个认证的接口,分别用于模拟用户和权限,以及读取用户和权限的操作方法。这两个接口分别是:UserDetails和UserDetailsService。

Java代码

public interface UserDetails extends Serializable {     GrantedAuthority[] getAuthorities();     String getPassword();     String getUsername();     boolean isAccountNonExpired();     boolean isAccountNonLocked();     boolean isCredentialsNonExpired();     boolean isEnabled(); } public interface UserDetails extends Serializable {     GrantedAuthority[] getAuthorities();     String getPassword();     String getUsername();     boolean isAccountNonExpired();     boolean isAccountNonLocked();     boolean isCredentialsNonExpired();     boolean isEnabled(); }

Spring Security 2配置精讲 上(8)

时间:2011-10-16

Java代码

public interface UserDetailsService {     UserDetails loadUserByUsername(String username)         throws UsernameNotFoundException, DataAccessException; } public interface UserDetailsService {     UserDetails loadUserByUsername(String username)         throws UsernameNotFoundException, DataAccessException; }

非常清楚,一个接口用于模拟用户,另外一个用于模拟读取用户的过程。所以我们可以通过实现这两个接口,来完成使用数据库对用户和权限进行管理的需求。在这里,我将给出一个使用Hibernate来定义用户和权限之间关系的示例。

1. 定义User类和Role类,使他们之间形成多对多的关系

Java代码

@Entity @Proxy(lazy = false) @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class User {     private static final long serialVersionUID = 8026813053768023527L;     @Id     @GeneratedValue     private Integer id;     private String name;     private String password;     private boolean disabled;     @ManyToMany(targetEntity = Role.class, fetch = FetchType.EAGER)     @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))     @Cache(usage = CacheConcurrencyStrateg

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号