快速业务通道

Spring源代码解析(九):Spring Acegi框架鉴权的实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
uthoritiesByUsernameMapping extends MappingSqlQuery {      protected AuthoritiesByUsernameMapping(DataSource ds) {        super(ds, authoritiesByUsernameQuery);        declareParameter(new SqlParameter(Types.VARCHAR));        compile();      }      protected Object mapRow(ResultSet rs, int rownum)        throws SQLException {        String roleName = rolePrefix + rs.getString(2);        GrantedAuthorityImpl authority = new GrantedAuthorityImpl (roleName);        return authority;      }    }    /**    * Query object to look up a user.    */    protected class UsersByUsernameMapping extends MappingSqlQuery {      protected UsersByUsernameMapping(DataSource ds) {        super(ds, usersByUsernameQuery);        declareParameter(new SqlParameter(Types.VARCHAR));        compile();      }      protected Object mapRow(ResultSet rs, int rownum)        throws SQLException {        String username = rs.getString(1);        String password = rs.getString(2);        boolean enabled = rs.getBoolean(3);        UserDetails user = new User(username, password, enabled, true, true, true,            new GrantedAuthority[] {new GrantedAuthorityImpl ("HOLDER")});        return user;      }    } }

Spring源代码解析(九):Spring Acegi框架鉴权的实现(5)

时间:2011-03-29 javaeye jiwenke

从数据库中得到用户信息后,就是一个比对用户输入的信息和这个数据库用户信息的 比对过程,这个比对过程在DaoAuthenticationProvider:

Java代码

//这个UserDetail是从数据库中查询到的,这个authentication是从用户输入 中得到的    protected void additionalAuthenticationChecks(UserDetails userDetails,      UsernamePasswordAuthenticationToken authentication)      throws AuthenticationException {      Object salt = null;      if (this.saltSource != null) {        salt = this.saltSource.getSalt(userDetails);      }      //如果用户没有输入密码,直接抛出异常      if (authentication.getCredentials() == null) {        throw new BadCredentialsException(messages.getMessage(            "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"),            includeDetailsObject ? userDetails : null);      }      //这里取得用户输入的密码      String presentedPassword = authentication.getCredentials() == null ? "" : authentication.getCredentials().toString();      //这里判断用户输入的密码是不是和数据库里的密码相同,这里可以使用 passwordEncoder来对数据库里的密码加解密      // 如果不相同,抛出异常,如果相同则鉴权成功      if (!passwordEncoder.isPasswordValid(          userDetails.getPassword(), presentedPassword, salt)) {        throw new BadCredentialsException(messages.getMessage(            "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"),   

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