ログインしていないユーザーが特定のページにアクセスできないようにするフィルターを作成しようとしていました。このために、次のdoFilter
メソッドでフィルター クラスを作成しました。
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String url = request.getRequestURI();
boolean allowedRequest = false;
System.out.println(url);
if(urlList.contains(url)) {
allowedRequest = true;
System.out.println("in list");
}
if (!allowedRequest) {
Object o = request.getSession().getAttribute("UserInfo");
if (null == o) {
System.out.println("Hey i am in");
response.sendRedirect("/login.jsp");
}
}
chain.doFilter(req, res);
} // end of doFilter
ユーザーがログインする必要のないページを許可するために、init() で arraylist url-list を作成しました。
今、非常に奇妙な愚かなことが起こっています。home.jsp と dcr.jsp の 2 つのページがあるとします。ログインせずにhome.jspにアクセスしようとすると、login.jspに正常にリダイレクトされますが、dcr.jspにアクセスしようとすると、ループif(null == o)に入りますがリダイレクトされません。コンソールに出力された行を取得しているためです。これは、サーバーで取得した出力です。これは、サーバーで取得した出力です。
/dcrmaintenance.jsp
Hey i am in
これは、 null == o が真であったことを示しています。
ページ dcr.jsp はセッション オブジェクトにアクセスし、ユーザーがログインしていないため、期待どおりに java.lang.NullPointerException を取得していますが、ループに入った後でもリダイレクトが行われない理由がわかりません。私は間違いを犯しています。