涉及到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>
[b]在TOMCAT环境下:[/b]
使用的角色名来自tomcat的配置文件
${CATALINA_HOME}/conf/tomcat-users.xml。
[b]在JBOSS环境下:[/b]
需要在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
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>
[b]在TOMCAT环境下:[/b]
使用的角色名来自tomcat的配置文件
${CATALINA_HOME}/conf/tomcat-users.xml。
[b]在JBOSS环境下:[/b]
需要在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