web.xml以外のサーブレット(または少なくともサーブレットのマッピング)を有効または無効にする方法があるのだろうか。同じweb.xmlを使用する複数の種類のサーバーがあります(これを変更することはできません)。そのため、サーブレットを有効/無効にする別の方法が役立つでしょう。
ありがとう、テオ
web.xml以外のサーブレット(または少なくともサーブレットのマッピング)を有効または無効にする方法があるのだろうか。同じweb.xmlを使用する複数の種類のサーバーがあります(これを変更することはできません)。そのため、サーブレットを有効/無効にする別の方法が役立つでしょう。
ありがとう、テオ
サーブレット3.0以降でアノテーションを使用できますが@WebServlet
、これが要件に対応するかどうかわからない場合は、これが希望どおりでない場合はコメントしてください。
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
// code code code
}
Tomcat 7.x /サーブレット3.0を使用している場合は、プログラムでサーブレットフィルタを追加して、web.xmlファイルやアプリケーションコードに触れることなく、一部のサーブレットへのアクセスを動的に有効/無効にすることができます。
ある種の構成を読み取り、特定の構成済みパスを通過またはリダイレクトするWebフィルターを作成するだけです。
もう1つのオプションは、セキュリティレイヤー(Spring Securityなど)のパスをブロックすることです(実際には、上記のようなものを使用します)。
フィルタ(を実装するクラス)を作成してjavax.servlet.Filter
から、xml
またはproperties
ファイル、さらにはにdatabase
、ユーザーがアクセスできる、またはアクセスできないサーブレットの名前を追加するのはどうでしょうか。
私の知る限り、デプロイメント記述子以外にサーブレットをプログラムで無効にするようなことはありません。
私がそのような問題に取り組む方法は次のとおりです。
-各サーブレットのservice()メソッドに、次のようなアクセスを制御したいifステートメントを追加します。
if(MyCustomSecurity.isServletAccessible(request)){
//here is your code that you have right now
}else{
//redirect request to an error page maybe
}
-MyCustomSecurityクラスにこのメソッドisServletAccessible()を作成します。これは、ユーザーがサーブレットにアクセスできるかどうかに関係なく、ブール値を返します。