JEE安全机制

   涉及到JAAS(Java 鉴别与授权服务)。本文重点介绍相关配置。

WEB-INFO/web.xml

<web-app>
<!--servlet等其他配置-->

<security-constraint>
    <web-resource-collection>
      <display-name>Example Security Constraint</display-name>
      <web-resource-name>Secure Area</web-resource-name>
      <url-pattern>/su/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
   </web-resource-collection>
   <auth-constraint>
      <role-name>role1</role-name>
      <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>ABC Administration Console</realm-name>
</login-config>
</web-app>

说明:
    <display-name>和<web-resource-name>可以是任意,但最好起一个有意义的名。   
    <auth-constraint>中<role-name>约束了只有哪些角色可以访问由<url-pattern>指定的资源。 
    <http-method>对指定方法的访问进行限定,未指出的不进行限定。   
    <login-config>:内说明的是以何种方式进行身份验证,有三种可选值:   None,Digest,Client-Cert,Basic,Form。
    <realm-name>:区域名,可以是你想给客户看的提示信息。   

  当<login-config>使用FORM时:
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/ua/login.jsp</form-login-page>
            <form-error-page>/ua/login.jsp?error=true</form-error-page>
        </form-login-config>
    </login-config>
  页面login.jsp

<FORM name="logonForm"  method="post" action="j_security_check">
   <input name="j_username" type="text" />
   <input name="j_password" type="password" />
</FORM>

在TOMCAT环境下:
   使用的角色名来自tomcat的配置文件
${CATALINA_HOME}/conf/tomcat-users.xml。

在JBOSS环境下:
需要在jboss-web.xml中配置JAAS的安全域:
<jboss-web>
<security-domain>java:/jaas/adc</security-domain>
</jboss-web>

abc是web工程名

还需要配置JBOSS/server/conf/login-config.xml:

例如:用户信息存放在数据库的方式。
<policy>
<application-policy name = "abc">
       <authentication>
         <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule"
                       flag="required">
           <module-option name="dsJndiName">java:/abcDS</module-option>
           <module-option name="principalsQuery">
             SELECT PASSWORD_ FROM abc_ID_USER WHERE NAME_=?
           </module-option>
           </login-module>
       </authentication>
    </application-policy>
</policy>


例如:数据以.properties文件形式存在:

<application-policy name = "abc">
       <authentication>
        <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
          flag="required">
          <module-option name="usersProperties">props/abc-user.properties</module-option>
          <module-option name="rolesProperties">props/abc-role.properties</module-option>
          <module-option name="unauthenticatedIdentity">anonymous</module-option>
        </login-module>
      </authentication>
    </application-policy>



参考:http://www.blogjava.net/asktalk/archive/2005/07/23/8221.html
http://www.velocityreviews.com/forums/t142248-how-to-authenticate-under-jbossjaas-from-a-public-web-app-page.html
http://blog.csdn.net/benjamin_liu/archive/2007/08/28/1761645.aspx

你可能感兴趣的:(tomcat,jsp,Web,xml,jboss)