shiroのSecurityUtils.getSubject()。getPrincipal()を使用して、現在のログインユーザー情報を取得します。
1.構成が正しいかどうかを確認します
(1)構成AuthorizationAttributeSourceAdvisorをクラス全体の先頭、少なくともshiroFilterFactoryBeanの前に設定します。
/**
* 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions)
* @return
* DefaultAdvisorAutoProxyCreator的顺序必须在shiroFilterFactoryBean之前,不然SecurityUtils.getSubject().getPrincipal()获取不到参数
*/
@Bean
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
advisorAutoProxyCreator.setProxyTargetClass(true);
advisorAutoProxyCreator.setUsePrefix(true);
return advisorAutoProxyCreator;
}
/**
* 开启aop注解支持
* @param securityManager
* @return
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
(2)開启advisorAutoProxyCreator.setUsePrefix(true);
2.取得したいユーザー情報をコードに設定しましたか?
Q:SecurityUtils.getSubject()。getPrincipal()セットによって取得されるユーザー情報はどこにありますか?
自定义レルムクラス-》 doGetAuthenticationInfo()メソッド-》 SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(user、user.getPassword()、byteSourceSalt、getName());
ここで設定されるメソッドの最初のパラメーターuserは、 SecurityUtils.getSubject()。getPrincipal()によって取得された値です。文字列およびオブジェクトタイプを設定することもできます。
3.アクセスインターフェイスは、ShiroFilterFactoryBeanでインターセプトルールを構成する必要があり、構成されていないルールは有効になりません。
比如:filterChainDefinitionMap.put( "/ static / **"、 "anon");