快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
   lastException = new ProviderNotFoundException (messages.getMessage("ProviderManager.providerNotFound",              new Object[] {toTest.getName()}, "No AuthenticationProvider found for {0}"));      }      // 这里发布事件来通知上下文的监听器      String className = exceptionMappings.getProperty (lastException.getClass().getName());      AbstractAuthenticationEvent event = null;      if (className != null) {        try {          Class clazz = getClass().getClassLoader().loadClass (className);          Constructor constructor = clazz.getConstructor(new Class[] {                Authentication.class, AuthenticationException.class              });          Object obj = constructor.newInstance(new Object[] {authentication, lastException});          Assert.isInstanceOf(AbstractAuthenticationEvent.class, obj, "Must be an AbstractAuthenticationEvent");          event = (AbstractAuthenticationEvent) obj;        } catch (ClassNotFoundException ignored) {}        catch (NoSuchMethodException ignored) {}        catch (IllegalAccessException ignored) {}        catch (InstantiationException ignored) {}        catch (InvocationTargetException ignored) {}      }      if (event != null) {        publishEvent(event);      } else {        if (logger.isDebugEnabled()) {          logger.debug("No event was found for the exception " + lastException.getClass().getName());        }      }      // Throw the exception      throw lastException;    }

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

时间:2011-03-29 javaeye jiwenke

我们下面看看在DaoAuthenticationProvider是怎样从数据库中取出对应的验证信息进 行用户验证的,在它的基类AbstractUserDetailsAuthenticationProvider定义了验证的 处理模板:

Java代码

public Authentication authenticate(Authentication authentication)      throws AuthenticationException {      Assert.isInstanceOf(UsernamePasswordAuthenticationToken.class, authentication,        messages.getMessage ("AbstractUserDetailsAuthenticationProvider.onlySupports",          "Only UsernamePasswordAuthenticationToken is supported"));      // 这里取得用户输入的用户名      String username = (authentication.getPrincipal() == null) ? "NONE_PROVIDED" : authentication.getName();      // 如果配置了缓存,从缓存中去取以前存入的用户验证信息 - 这里是 UserDetail,是服务器端存在数据库里的用户信息,这样就不用每次都去数据库中取了      boolean cacheWasUsed = true;      UserDetails user = this.userCache.getUserFromCache(username);      //没有取到,设置标志位,下面会把这次取到的服务器端用户信息存入缓存 中去      if (user == null) {        cacheWasUsed = false;        try {//这里是调用UserDetailService去取用户数据库里信息的地方          user = r

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