为了账号安全,请及时绑定邮箱和手机立即绑定

securityManager设置realm之后,realm再设置matcher,怎么生效的?

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);


正在回答

4 回答

JAVA的对象参数是引用传递的而不是值传递。你无论什么时候设置对象参数的属性都一样。

0 回复 有任何疑惑可以回复我~

去看HashedCredentialsMatcher的源码,里边有个doCredentialsMatch方法,你可以把断点打到这里,程序运行的时候一步步看,很清楚地就能看到shiro的匹配过程



0 回复 有任何疑惑可以回复我~

java的引用传递

2 回复 有任何疑惑可以回复我~
#1

艾尔帕西诺

java没有引用传递 只有值传递
2019-01-24 回复 有任何疑惑可以回复我~
#2

慕婉清秋 回复 艾尔帕西诺

不要误人子弟
2021-05-13 回复 有任何疑惑可以回复我~
下面后续的部分代码

//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的规则去进行权限认证。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

securityManager设置realm之后,realm再设置matcher,怎么生效的?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信