サーブレット3.0の仕様に従い、「サーブレットがサーブレットコンテキストのcreateServletメソッドによって構築された場合を除き、@ ServletSecurityアノテーションは、サーブレットコンテキストインターフェイスのaddServlet(string、Servlet)メソッドを使用して作成するサーブレット登録のURLパターンには適用されません。」
ただし、実験中、ServletSecurityアノテーションは、ServletContextListener.contextInitialized()メソッドで追加するすべてのサーブレットに適用されます。
リスナーコード:
public void contextInitialized(ServletContextEvent e) {
System.out.println(" ContextInitialized -- start");
ServletContext ctx = e.getServletContext();
try {
ServletRegistration.Dynamic sr2 = ctx.addServlet("myServlet2", "com.example.web.MyServlet1");
sr2.addMapping("/myServlet2");
System.out.println("param2 added status : " + sr2.setInitParameter("param2", "value2"));
sr2.setLoadOnStartup(3);
Class<MyServlet1> myServletClass = (Class<MyServlet1>) Class.forName("com.example.web.MyServlet1");
ServletRegistration.Dynamic sr3 = ctx.addServlet("myServlet3", myServletClass);
sr3.addMapping("/myServlet3");
sr3.setLoadOnStartup(2);
System.out.println("param3 added status : " + sr3.setInitParameter("param3", "value3"));
MyServlet1 myServlet4 = ctx.createServlet(myServletClass);
ServletRegistration.Dynamic sr4 = ctx.addServlet("myServlet4", myServlet4);
sr4.addMapping("/myServlet4");
sr4.setLoadOnStartup(1);
System.out.println("param4 added status : " + sr4.setInitParameter("param4", "value4"));
} catch(ClassNotFoundException ex) {
ex.printStackTrace();
}catch(ServletException ex) {
ex.printStackTrace();
}
System.out.println(" ContextInitialized -- finish");
}
サーブレットでの注釈:
@ServletSecurity (
httpMethodConstraints = {
@HttpMethodConstraint(
value="GET",
rolesAllowed = {"sme"},
transportGuarantee = ServletSecurity.TransportGuarantee.NONE// CONFIDENTIAL
),
@HttpMethodConstraint(
value="POST",
rolesAllowed = {"ssme"},
transportGuarantee = ServletSecurity.TransportGuarantee.NONE//CONFIDENTIAL
)
}
)
それらすべての認証を求めています。
どんな洞察も役に立ちます。
ありがとう-Vineet