ShiroのSecurityUtils.getSubject()。getPrincipal()は、現在ログインしているユーザー情報をnullとして取得します

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

 

 

 

おすすめ

転載: blog.csdn.net/Mint6/article/details/104242875
おすすめ