权限4

  1.     public boolean isUsernameBasedPrimaryKey() {  
  2.         return usernameBasedPrimaryKey;  
  3.     }  
  4.     //这里是取得数据库用户信息的具体过程   
  5.     public UserDetails loadUserByUsername(String username)  
  6.         throws UsernameNotFoundException, DataAccessException {  
  7.         //根据用户名在用户表中得到用户信息,包括用户名,密码和用户是否有效的信息   
  8.         List users = usersByUsernameMapping.execute(username);  
  9.   
  10.         if (users.size() == 0) {  
  11.             throw new UsernameNotFoundException("User not found");  
  12.         }  
  13.         //取集合中的第一个作为有效的用户对象   
  14.         UserDetails user = (UserDetails) users.get(0); // contains no GrantedAuthority[]   
  15.         //这里在权限表中去取得用户的权限信息,同样的返回一个权限集合对应于这个用户   
  16.         List dbAuths = authoritiesByUsernameMapping.execute(user.getUsername());  
  17.   
  18.         addCustomAuthorities(user.getUsername(), dbAuths);  
  19.   
  20.         if (dbAuths.size() == 0) {  
  21.             throw new UsernameNotFoundException("User has no GrantedAuthority");  
  22.         }  
  23.         //这里根据得到的权限集合来配置返回的User对象供以后使用   
  24.         GrantedAuthority[] arrayAuths = (GrantedAuthority[]) dbAuths.toArray(new GrantedAuthority[dbAuths.size()]);  
  25.   
  26.         String returnUsername = user.getUsername();  
  27.   
  28.         if (!usernameBasedPrimaryKey) {  
  29.             returnUsername = username;  
  30.         }  
  31.   
  32.         return new User(returnUsername, user.getPassword(), user.isEnabled(), true, true, true, arrayAuths);  
  33.     }  
  34.   
  35.     public void setAuthoritiesByUsernameQuery(String queryString) {  
  36.         authoritiesByUsernameQuery = queryString;  
  37.     }  
  38.   
  39.     public void setRolePrefix(String rolePrefix) {  
  40.         this.rolePrefix = rolePrefix;  
  41.     }  
  42.   
  43.     public void setUsernameBasedPrimaryKey(boolean usernameBasedPrimaryKey) {  
  44.         this.usernameBasedPrimaryKey = usernameBasedPrimaryKey;  
  45.     }  
  46.   
  47.     public void setUsersByUsernameQuery(String usersByUsernameQueryString) {  
  48.         this.usersByUsernameQuery = usersByUsernameQueryString;  
  49.     }  
  50.   
  51.     //~ Inner Classes ==================================================================================================   
  52.   
  53.     /**   
  54.      * 这里是调用Spring JDBC的数据库操作,具体可以参考对JDBC的分析,这个类的作用是把数据库查询得到的记录集合转换为对象集合 - 一个很简单的O/R实现
  55.      */  
  56.     protected class AuthoritiesByUsernameMapping extends MappingSqlQuery {  
  57.         protected AuthoritiesByUsernameMapping(DataSource ds) {  
  58.             super(ds, authoritiesByUsernameQuery);  
  59.             declareParameter(new SqlParameter(Types.VARCHAR));  
  60.             compile();  
  61.         }  
  62.   
  63.         protected Object mapRow(ResultSet rs, int rownum)  
  64.             throws SQLException {  
  65.             String roleName = rolePrefix + rs.getString(2);  
  66.             GrantedAuthorityImpl authority = new GrantedAuthorityImpl(roleName);  
  67.   
  68.             return authority;  
  69.         }  
  70.     }  
  71.   
  72.     /**   
  73.      * Query object to look up a user.
  74.      */  
  75.     protected class UsersByUsernameMapping extends MappingSqlQuery {  
  76.         protected UsersByUsernameMapping(DataSource ds) {  
  77.             super(ds, usersByUsernameQuery);  
  78.             declareParameter(new SqlParameter(Types.VARCHAR));  
  79.             compile();  
  80.         }  
  81.   
  82.         protected Object mapRow(ResultSet rs, int rownum)  
  83.             throws SQLException {  
  84.             String username = rs.getString(1);  
  85.             String password = rs.getString(2);  
  86.             boolean enabled = rs.getBoolean(3);  
  87.             UserDetails user = new User(username, password, enabled, true, true, true,  
  88.                     new GrantedAuthority[] {new GrantedAuthorityImpl("HOLDER")});  
  89.   
  90.             return user;  
  91.         }  
  92.     }  
    1. }  
    2. public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService {    //~ Static fields/initializers =====================================================================================    //这里是预定义好的对查询语句,对应于默认的数据库表结构,也可以自己定义查询语句对应特定的用户数据库验证表的设计    public static final String DEF_USERS_BY_USERNAME_QUERY =            "SELECT username,password,enabled FROM users WHERE username = ?";    public static final String DEF_AUTHORITIES_BY_USERNAME_QUERY =            "SELECT username,authority FROM authorities WHERE username = ?";    //~ Instance fields ================================================================================================    //这里使用Spring JDBC来进行数据库操作    protected MappingSqlQuery authoritiesByUsernameMapping;    protected MappingSqlQuery usersByUsernameMapping;    private String authoritiesByUsernameQuery;    private String rolePrefix = "";    private String usersByUsernameQuery;    private boolean usernameBasedPrimaryKey = true;    //~ Constructors ===================================================================================================    //在初始化函数中把查询语句设置为预定义的SQL语句    public JdbcDaoImpl() {        usersByUsernameQuery = DEF_USERS_BY_USERNAME_QUERY;        authoritiesByUsernameQuery = DEF_AUTHORITIES_BY_USERNAME_QUERY;    }    //~ Methods ========================================================================================================    protected void addCustomAuthorities(String username, List authorities) {}    public String getAuthoritiesByUsernameQuery() {        return authoritiesByUsernameQuery;    }    public String getRolePrefix() {        return rolePrefix;    }    public String getUsersByUsernameQuery() {        return usersByUsernameQuery;    }    protected void initDao() throws ApplicationContextException {        initMappingSqlQueries();    }    /**     * Extension point to allow other MappingSqlQuery objects to be substituted in a subclass     */    protected void initMappingSqlQueries() {        this.usersByUsernameMapping = new UsersByUsernameMapping(getDataSource());        this.authoritiesByUsernameMapping = new AuthoritiesByUsernameMapping(getDataSource());    }    public boolean isUsernameBasedPrimaryKey() {        return usernameBasedPrimaryKey;    }    //这里是取得数据库用户信息的具体过程    public UserDetails loadUserByUsername(String username)        throws UsernameNotFoundException, DataAccessException {        //根据用户名在用户表中得到用户信息,包括用户名,密码和用户是否有效的信息        List users = usersByUsernameMapping.execute(username);        if (users.size() == 0) {            throw new UsernameNotFoundException("User not found");        }        //取集合中的第一个作为有效的用户对象        UserDetails user = (UserDetails) users.get(0); // contains no GrantedAuthority[]        //这里在权限表中去取得用户的权限信息,同样的返回一个权限集合对应于这个用户        List dbAuths = authoritiesByUsernameMapping.execute(user.getUsername());        addCustomAuthorities(user.getUsername(), dbAuths);        if (dbAuths.size() == 0) {            throw new UsernameNotFoundException("User has no GrantedAuthority");        }      
      比对工
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值