認証フィルタを作って、パラメータにparam=1が含まれている場合、リクエストで呼び出したサーブレットに遷移し、それ以外ならばエラーページに遷移するようにしたいです。下記のように書いたのですが、param=1以外でアクセスしてもエラーページに遷移しません。
フィルタのコード
web.xml
どなたかお分かりになる方がいらっしゃいましたら宜しくお願い致します。
フィルタのコード
package union;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SampleFilter1 implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String param = req.getParameter("param");
if (param != "1") {
((HttpServletResponse)response).sendRedirect("/html/error.html");
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig config) throws ServletException {
}
}
param=1だった場合呼び出されるサーブレット
package union;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author
*
*/
public class SampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
String disp = "/html/sample.html";
RequestDispatcher dispatch = request.getRequestDispatcher(disp);
dispatch.forward(request, response);
}
}
web.xml
<web-app>
<filter>
<filter-name>sampleFilter1</filter-name>
<filter-class>sampleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sampleFilter1</filter-name>
<url-pattern>/sampleServlet</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>sampleServlet1</servlet-name>
<servlet-class>sampleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sampleServlet</servlet-name>
<url-pattern>/sampleServlet</url-pattern>
</servlet-mapping>
<!--エラーページ-->
<error-page>
<error-code>404</error-code>
<location>/html/error.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/html/error.html</location>
</error-page>
</web-app>
以上になります。分かりづらくてすみません。
どなたかお分かりになる方がいらっしゃいましたら宜しくお願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
String param = req.getParameter("param");
if (param != "1") {
((HttpServletResponse)response).sendRedirect("/html/error.html");
}
の部分を
String param = req.getParameter("param");
if ("1".equals(param)) { // この行を変更
((HttpServletResponse)response).sendRedirect("/html/error.html");
return; // 次のフィルタを呼び出すと別のURLにいくかもしれないため
}
とするとFilterからリダイレクトできるのではないでしょうか?
Javaの場合、
==
や!=
はオブジェクトの同一性を確認する演算子です。param != "1"
は同じオブジェクトの事がほぼないので、falseになります。
また、次のフィルタに処理を渡すと別のURLに遷移させる等処理が行われるので、
chain.doFilter(request, response);
を呼ばないようにしました。投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
退会済みユーザー
2015/08/11 10:05
質問の「うまくいきません」の部分をもう少し具体的に書いていただけませんか?例えば「/sampleServlet?param=1にアクセスしてもエラーページが表示されない」とかです。
sarasa7
2015/08/11 22:17
申し訳ありません。質問内容を更新致しました。