2016-09-21 16 views
0

基本的に、セッションチェッカーで特定のセッション名属性を要求して存在するかどうかを確認するセッションチェッカーが必要です。存在しない場合は、ログインページにリダイレクトされます。シンプルに聞こえますが、私はリダイレクトに問題があります。Java - セッションの確認とリダイレクトが存在しない場合

リダイレクトを削除し、if文の下にテキストを印刷すると、ページに印刷されます。しかし、リダイレクトしようとすると、それはできません。 コードは、私がこのようなコードを書いた

<jsp:include page="/radnikSession" /> 

でページの先頭に含まれているコントローラファイルのいずれかの下です。

String id; 

HttpSession session = request.getSession(false); 
id = (String)session.getAttribute("sessionRadnikID"); 

if(id == null) { 
    //out.println("No session id"); 
    response.sendRedirect("login.jsp"); 
} 

私は間違っていますか?そのような

+0

session'がnullの場合も 'ことを警戒してください:

public class SecurityFilter implements Filter { public SecurityFilter() { } public void init(FilterConfig conf) throws ServletException { } public void destroy() { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) { String id; HttpSession session = request.getSession(false); id = (String)session.getAttribute("sessionRadnikID"); if(id == null) { //out.println("No session id"); response.sendRedirect("login.jsp"); } else { chain.doFilter(servletRequest, servletResponse); } } } 

その後のようなものは、あなたのweb.xmlにそれを設定! 'getSession'は現在のセッションを返します。存在しない場合は、メソッドに 'true'が渡されない限りnullが返され、新しいセッションが作成されて返されます。あなたが提供したものは動作するはずです(あなたがNullPointerExceptionを実行していないと仮定して)。 – nasukkin

+0

「ヌル」だけでなく、コンテンツがあるかどうかを確認することもできます。ほぼすべての文字列の 'null'チェックをやめ、' StringUtils.isBlank(...) 'と' StringUtils.isNotBlank(...) 'に切り替えました。那須キンは言ったように、セッションが「ヌル」の場合は、隠れたエラーで終了することもあります。 –

+0

'request.getSession()'に 'false'を渡す点は何ですか?要求が既にセッションの一部ではない場合は、確かにあなたは*作成して*作成したいと思うでしょうか?それ以外の場合は、ログインページでセッション属性を保存する場所はどこですか? 'true'を渡す(あるいは' getSession() 'の他のバージョンを使用する)場合、' null'が返されることを心配する必要はありません。 –

答えて

0

何か:

<filter> 
    <filter-name>Security Page Filter</filter-name> 
    <filter-class>com.mystuff.security.SecurityFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>Security Page Filter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
</filter-mapping> 
+0

私はあなたの助けを借りて何とか働いてくれました。しかし、リダイレクトについては別の問題があります。 <のfilter-mapping> SessionFilter /管理/ * login.jspを除き、そこにすべてのページをフィルタリングする方法。私はどこに向かうのか知っていると思う。管理パネルのすべてのページにlogin.jspがあります。そして今、私は無限リダイレクションに直面しています。 –

+0

リクエストオブジェクトをチェックして、ページリクエストがログインページかログインサーブレットかどうかを確認できます。「ServletRequest」を「HttpServletRequest」にキャストし、getRequestURLやgetRequestURIを使用してリクエストされたURLがログインページかどうかを確認し、そうであれば「chain.doFilter(...)」を実行するリダイレクトよりも – slambeth

+0

これは、これがどのように行われるかのアイデアを見ることができる別の例です:http://cse.csusb.edu/turner/java_web_programming/security/filter/ – slambeth

関連する問題