实现登录认证:

shiro框架源码:

 首先要知道: subject真正的实现类:

shiro框架源码:

subject = (newSubject.Builder()).buildSubject(); 

shiro框架源码: 

shiro框架源码: 

SecurityManager :是一个接口,需要找到对应的实现类: 

接口是什么,就是一种规范,这种规范使得框架可以嵌入到其他框架、软件中的一个规则

 shiro框架源码:

SecurityManager 的实现类是DefaultWebSecurityManager; 注意是class ,不是interface【可以是abstract class,但是从设计模式中看的话,如果类继承了抽象类的话,可能该方法不是真正的方法(子类重写了)],

shiro框架源码: 

Subject的创建吗:

this.securityManager.createSubject(this.subjectContext);

---》DefaultSecurityManager中的

public Subject createSubject(SubjectContext subjectContext) {
    //create a copy so we don't modify the argument's backing map:
    SubjectContext context = copy(subjectContext);
 */
protected Subject doCreateSubject(SubjectContext context) {
    return getSubjectFactory().createSubject(context);
}
protected SubjectFactory subjectFactory;

/**
 * Default no-arg constructor.
 */
public DefaultSecurityManager() {
    super();
    this.subjectFactory = new DefaultSubjectFactory();
    this.subjectDAO = new DefaultSubjectDAO();
}
最终得到Subject类的实现类:DefaultSecurityManager;
登录实现方法:

shiro框架源码:

 该类的securityManager从配置文件(或java中找) DefaultSecurityManager:

相关文章: