1

この Web アプリケーションは、Shiro と JSF で動作します。PrimeFaces を追加しましたが、ログイン リダイレクトの問題が発生しています。

予想される動作:

  1. 認証が必要な URL に移動します
  2. ログインページにリダイレクト
  3. ログインは元のページにリダイレクトされました

primfaces での動作

  1. 認証が必要な URL に移動します
  2. ログインページにリダイレクト
  3. ログイン後、 javax.faces.resource/theme.css?ln=primefaces-aristo にリダイレクトされます

shiro.iniファイルでリクエストパラメーターをキャッチしてユーザーをログインします

# name of request parameter with username; if not present filter assumes 'username'
authc.usernameParam = login:username
# name of request parameter with password; if not present filter assumes 'password'
authc.passwordParam = login:password
# does the user wish to be remembered?; if not present filter assumes 'rememberMe'
authc.rememberMeParam = login:remembered

代わりに a を使用するようにこれを変更しPassThruAuthenticationFilter、ログイン要求は my によって処理されますBeanが、これでも同じエラーが発生します。Bean ログイン方法

AuthenticationToken token =  new UsernamePasswordToken(username, password);
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);
ServletRequest request = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
ServletResponse response = (ServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
WebUtils.redirectToSavedRequest(request, response, "index.xhtml");

私のログインBeanは@RequestScoped

4

1 に答える 1

1

この問題の根本的な原因は、すべてのビューが同じディレクトリにあることでした。ルート ディレクトリ内のすべてに対して認証を要求するように shiro を構成しました/*

ログイン ページが表示された理由は、これが「特別な」ケースであるためです。shiro 構成でログイン ページとして定義されています。このページを読み込んだ後、ブラウザは css ファイルと js ファイルに対して追加のリクエストを行ったため、このページにはテーマがありませんでした。

の動作を考えると、WebUtils.redirectToSavedRequest(request, response, "index.xhtml");shiro は、ログイン ページではない、最後に受信した要求を単純に保存しているように見えます。

于 2012-12-29T19:35:29.213 に答える