向之所欣
2018-05-19 20:30
CustomRealm customRealm = new CustomRealm(); DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager(); // 设置realm defaultSecurityManager.setRealm(customRealm); HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(); matcher.setHashAlgorithmName("md5"); matcher.setHashIterations(1); // 设置matcher customRealm.setCredentialsMatcher(matcher); SecurityUtils.setSecurityManager(defaultSecurityManager);
JAVA的对象参数是引用传递的而不是值传递。你无论什么时候设置对象参数的属性都一样。
去看HashedCredentialsMatcher的源码,里边有个doCredentialsMatch方法,你可以把断点打到这里,程序运行的时候一步步看,很清楚地就能看到shiro的匹配过程
java的引用传递
下面后续的部分代码 //2、主体提交认证请求 SecurityUtils.setSecurityManager(defaultSerityManager); Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("Mark", "123456"); subject.login(token);
matcher设置进到了customRealm,customRealm设置进了defaultSecurityManager,
defaultSecurityManager设置进到了SecurityUtils,
通过SecurityUtils获取一个subject主体,登录的token会依据这条链路最终使用到设置的匹配器matcher的规则去进行权限认证。
Shiro安全框架入门
48036 学习 · 332 问题
相似问题