1

サーブレット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

4

1 に答える 1

0

@ServletSecurity annotation、サーブレットにマップされたすべての URL パターンに適用されます。メソッドを通じてプログラム的に追加されたサーブレットのみを除外しますaddServlet(..)

スペックによると…………

@ServletSecurity アノテーションは、サーブレットが ServletContext インターフェースの createServlet メソッドによって構築されていない限り、 ServletContext インターフェースの addServlet(String, Servlet) メソッドを使用して作成された ServletRegistration の URL パターンには適用されません。

于 2012-07-23T05:25:56.753 に答える