0

サーブレットとJSPを使用して単純なWebアプリケーションを作成しています。ユーザーがすでにログインしているかどうかをチェックし、文字通りユーザーセッションが生きているかどうかをチェックするフィルターを実装しています。セッションが有効でない場合、ユーザーはログインページ(index、jsp)にリダイレクトされる必要があります

これは、web.xmlファイルのフィルターマッピングです。

 <web-app xmlns...>
  <display-name>FilterTest</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <servlet>
    <description></description>
    <servlet-name>LoginController</servlet-name>
    <servlet-class>LoginController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginController</servlet-name>
    <url-pattern>/LoginController</url-pattern>
  </servlet-mapping>
</web-app>

ユーザーが別のページにアクセスしようとすると、LoginFilterはセッションをチェックします。セッションが有効な場合、ユーザーは要求されたページにリダイレクトされます。それ以外の場合は、index.jspにリダイレクトされます。

私がここで直面している問題はLoginFilter、ユーザーがログインしているときでもセッションをチェックすることです(要求はindex.jspログインページであるから来ます)。つまり、ユーザーがログインすると、コントロールはに移動しLoginFilterます。このユーザーのセッションはまだ作成されていないため、ユーザーはログインページにリダイレクトされ、無期限のリダイレクトループが作成されます。

からのリクエストの場合、フィルターチェック/セッションチェックを除外したいindex.jsp

これを達成する方法はありますか?または、要求しているページがであるかどうかを識別する方法はありindex.jspますか?

更新:アプリケーションの起動時のURLは次のとおりhttp://servername:port/FilterTest です。ここにindex.jspがロードされます。

LoginControllerログインが成功した場合にユーザーをhome.jsp(ウェルカムページ)にリダイレクトするサーブレットでのログインを検証しています。

ありがとう..!

4

1 に答える 1

4

Filterログインページのチェックをスキップする

requestedUrlをチェックして、フィルター(LoginPage、CSS、Images、JSの場合)が必要ないかどうかを確認してから、単に実行する必要があります。

chain.doFilter(request, response);  

initパラメーターをfromcreateaに渡しFilterます。これはweb.xml 、フィルターチェックを必要としないため、URLがそれらの1つであるかどうかをチェックし、単純にinit()List<String> urlsdoFilter()chain.doFilter(request, response);

于 2012-06-11T06:34:36.980 に答える