1

Shiro(v1.2.1) をセキュリティ フレームワークとして使用していますが、完全に動作しますが、 Tomcat(v7.0.32) のアクセス ログでは、認証されたユーザーがリソースにアクセスすると、ログにリモート ユーザーを取得できません。私のサンプル Web アプリケーションでは、ShiroSVN サンプルリポジトリで提供されているデフォルト設定を使用しました。


127.0.0.1 - - [13/Nov/2012:08:22:55 +0200] "POST /pacs/login.jsp HTTP/1.1" 302 - // User here not logged
127.0.0.1 - - [13/Nov/2012:08:22:55 +0200] "GET /pacs/ HTTP/1.1" 200 821 // Here user is accessing protected page, so we got permission.

これを解決する方法はありますか?

4

2 に答える 2

0

Shiroのネイティブセッション管理を使用している場合、session.getPrincipal()は期待どおりに機能します。この呼び出しがデフォルトのセッション管理で機能することを確認したい場合は、Jiraの問題を開いてください。できるだけ早く修正できるかどうかを確認します。

于 2012-11-14T17:28:47.470 に答える
0

これが公式の解決策かどうかはわかりませんが、私にとってはうまくいく解決策です:

AccessLogValve パターンの場合は、次を使用します

%u - Remote user that was authenticated (if any), else '-'

これにより、「推測されたユーザー名」が出力されます。tomcat がユーザー名を推測する方法を Google に尋ねると、次のような結果が得られます。

For the user name, the manager uses the Session.getPrincipal() if available; 
if not, it tries the following Session attribute names:
  Login
  User
  userName
  UserName
  Utilisateur
using the given case, lower case, and upper case.  Failing that, it searches for
attributes that are instances of java.security.Principal or
javax.security.auth.Subject. 

私の場合は、ログイン コードを変更して、ユーザー オブジェクトをセッションに書き込みました。Tomcat は、「推測されたユーザー名」を出力するために、このオブジェクトで .toString() を呼び出します。

.toString() からの結果が必要なものでない場合は、使用することもできます

%{xxx}s xxx is an attribute in the HttpSession

セッションから別の属性を出力するために、AccessLogValve 構成で。

それが役立つことを願っています。

于 2012-11-14T08:19:06.690 に答える