Shiroは私が無効で、ブロックされていることを覚えています.


シロは私が無効であることを覚えていて、ブロックされました
シーンの説明:
Shiroのメモリー機能はログイン時に、現在のユーザーを記憶するオプションを選択してログインし、ブラウザを閉じた後、ログイン情報が生きている間にプロジェクト内のページに直接アクセスすることができます.プログラム内で、ログインしたユーザーを覚えているかどうかを判断し、他の一連の制限操作を行うことができます.
ネット上の構成に従って構成が完了した後、私を覚えてから他の機能に再アクセスするとブロックされ、プロジェクトのdebugでブレークポイントを打った部分を通過せず、直接ログイン処理されていないログインページにジャンプされ、多くの関連構成ドキュメントを調べたが、試しても実現できなかった.実はクッキーに保存されている情報が取り込まれており、ブロックされたページアドレスバーは以下の通りです.
http://localhost:xxxx/xxxx/login.do;jsessionid=4D328B61960C713B2F563385F85EC43C

理由:
他の友人に聞くと、エンティティクラスがシーケンス化されていないため、Shiroはエンティティオブジェクトをローカルクッキーにシーケンス化して保存しているが、多くのドキュメントがこれに言及していないので、自分がこの意識を持っていないのかもしれない.
解決策:
変更前:
public class User  {
...
}

変更後:
public class User implements Serializable {
...
}

再度テストしたところ、debugに合格するとプロジェクト中のブレークポイントが入ったところを発見しました.
カスタムブロッキングを設定してローカルユーザーをセッションに挿入
参考記事アドレス:https://blog.csdn.net/u011277123/article/details/70214599
シーンの説明:
他のすべてのcontrollerではユーザに関するものはセッションから取得されているが、私がログインしたユーザのユーザ情報がローカルのクッキーに置かれていることを覚え、shiroが取得した後はそれを入れたsubjectに入れ、subjectで私のユーザを覚えている情報を取得することができる.しかし、私のjspページではelタグでユーザーオブジェクトを取得し、フロントページに表示しているので、いっそカスタムフィルタを作りました.すべてのアクセスはこのフィルタを1回歩かなければなりません.私がログインしたことを覚えておくことで、ローカルで取得したユーザーオブジェクトをsessionに入れ、以下のように構成されています.
JAvaクラス:
public class MyRememberFilter extends FormAuthenticationFilter {
    @Override
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
        Subject subject=getSubject(request,response);
        //          ,       
        // isRemembered true、isAuthenticated false
        if(!subject.isAuthenticated() && subject.isRemembered()){
            //            ,     principal    ,     session
            if(subject.getSession().getAttribute("user")==null && subject.getPrincipal() != null){
                subject.getSession().setAttribute("user",subject.getPrincipal());
            }
        }
        return subject.isAuthenticated() || subject.isRemembered();
    }
}

 
applicationContext.xmlのbeanはshiroフィルタ構成を導入します.
	
		
    ...
    
	
        ...
		
		
			
				
			
		
		
		
			
				
				/static/** = anon
				
				/login.do=anon
				/toLogin.do=anon
				/** = user
                
                /** = MyRemember
			
		
	

私は関連する配置だけを置いて、関係のないものはすべて省略しました;
by the way:
1.Shiroのその他の配置はこのブロガーの文章を読むことを提案して、私は書くのが最も整然として分かりやすいと思います:https://blog.csdn.net/u012737182/article/category/6489910
2.シーケンス化と逆シーケンス化に関する記事:https://blog.csdn.net/qq_27093465/article/details/78544505