Shiroは私が無効で、ブロックされていることを覚えています.
シロは私が無効であることを覚えていて、ブロックされました
シーンの説明:
Shiroのメモリー機能はログイン時に、現在のユーザーを記憶するオプションを選択してログインし、ブラウザを閉じた後、ログイン情報が生きている間にプロジェクト内のページに直接アクセスすることができます.プログラム内で、ログインしたユーザーを覚えているかどうかを判断し、他の一連の制限操作を行うことができます.
ネット上の構成に従って構成が完了した後、私を覚えてから他の機能に再アクセスするとブロックされ、プロジェクトのdebugでブレークポイントを打った部分を通過せず、直接ログイン処理されていないログインページにジャンプされ、多くの関連構成ドキュメントを調べたが、試しても実現できなかった.実はクッキーに保存されている情報が取り込まれており、ブロックされたページアドレスバーは以下の通りです.
理由:
他の友人に聞くと、エンティティクラスがシーケンス化されていないため、Shiroはエンティティオブジェクトをローカルクッキーにシーケンス化して保存しているが、多くのドキュメントがこれに言及していないので、自分がこの意識を持っていないのかもしれない.
解決策:
変更前:
変更後:
再度テストしたところ、debugに合格するとプロジェクト中のブレークポイントが入ったところを発見しました.
カスタムブロッキングを設定してローカルユーザーをセッションに挿入
参考記事アドレス:https://blog.csdn.net/u011277123/article/details/70214599
シーンの説明:
他のすべてのcontrollerではユーザに関するものはセッションから取得されているが、私がログインしたユーザのユーザ情報がローカルのクッキーに置かれていることを覚え、shiroが取得した後はそれを入れたsubjectに入れ、subjectで私のユーザを覚えている情報を取得することができる.しかし、私のjspページではelタグでユーザーオブジェクトを取得し、フロントページに表示しているので、いっそカスタムフィルタを作りました.すべてのアクセスはこのフィルタを1回歩かなければなりません.私がログインしたことを覚えておくことで、ローカルで取得したユーザーオブジェクトをsessionに入れ、以下のように構成されています.
JAvaクラス:
applicationContext.xmlのbeanはshiroフィルタ構成を導入します.
私は関連する配置だけを置いて、関係のないものはすべて省略しました;
by the way:
1.Shiroのその他の配置はこのブロガーの文章を読むことを提案して、私は書くのが最も整然として分かりやすいと思います:https://blog.csdn.net/u012737182/article/category/6489910
2.シーケンス化と逆シーケンス化に関する記事:https://blog.csdn.net/qq_27093465/article/details/78544505
シーンの説明:
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