Java Web的安全验证机制的例子

security-constraint

部署描述符中的security-constraint元素允许不通过编程就可以限制对某个资源的访问。

<!ELEMENT security-constraint (display-name?,web-resource-collection+,auth-constraint?, user-data-constraint?)>
<!ELEMENT display-name (#PCDATA)>
<!ELEMENT web-resource-collection (web-resource-name, description?,url-pattern*, http-method*)>
<!ELEMENT auth-constraint (description?, role-name*)>
<!ELEMENT user-data-constraint (description?, transport-guarantee)>

(1) web-resource-collection元素

web-resource-collection元素标识需要限制访问的资源子集。在web-resource-collection元素中,可以定义URL模式和HTTP方法。如果不存在HTTP方法,就将安全约束应用于所有的方法。

<!ELEMENT web-resource-collection (web-resource-name, description?, url-pattern*, http-method*)>
<!ELEMENT web-resource-name (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT http-method (#PCDATA)>
web-resource-name是与受保护资源相关联的名称。http-method元素可被赋予一个HTTP方法,比如GET和POST。

(2) auth-constraint元素

auth-constraint元素用于指定可以访问该资源集合的用户角色。如果没有指定auth-constraint元素,就将安全约束应用于所有角色。

<!ELEMENT auth-constraint (description?, role-name*)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT role-name (#PCDATA)>
(3) user-data-constraint元素

user-data-constraint元素用来显示怎样保护在客户端和Web容器之间传递的数据。

<!ELEMENT user-data-constraint (description?, transport-guarantee)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT transport-guarantee (#PCDATA)>
transport-guarantee元素必须具有如下的某个值:

NONE,这意味着应用不需要传输保证
INTEGRAL,意味着服务器和客户端之间的数据必须以某种方式发送,而且在传送中不能改变。
CONFIDENTIAL,这意味着传输的数据必须是加密的数据。
在大多数情况下,安全套接字层(SSL)用于INTEGRAL或CONFIDENTIAL

security-role

security-role元素指定用于安全约束中的安全角色的声明。

<!ELEMENT security-role (description?, role-name)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT role-name (#PCDATA)>
注意:security-constraint中的role-name和security-role是没有关系的

在tomcat中,有没有设定security-role是没有关系的

在其他商业应用服务器,如Weblogic, Jboss上,通常会设定security-role,以便在security-constraint中引这些security-role

login-config

login-config元素用来指定所使用的验证方法、领域名和表单验证机制所需的特性。

<!ELEMENT login-config (auth-method?, realm-name?, form-login-config?)>
<!ELEMENT auth-method (#PCDATA)>
<!ELEMENT realm-name (#PCDATA)>
<!ELEMENT form-login-config (form-login-page, form-error-page)>

login-config子元素的描述如下:

(1) auth-method指定验证方法。它的值为下面的一个:BASIC、DIGEST、FORM或 CLIENT-CERT

BASIC, HTTP规范,Base64,这种方式被认为是最不安全的认证,因为它没有提供强烈的加密措施

<web-app>  
    ......  
    <login-config>  
        <auth-method>BASIC</auth-method>  
    </login-config>  
    ......  
</web-app>

DIGEST:HTTP规范,MD5,它是种比较安全的认证,它在认证时将请求数据 通过MD5的加密方式进行认证

<web-app>  
    ......  
    <login-config>  
        <auth-method>DIGEST</auth-method>  
    </login-config>  
    ......  
</web-app>

CLIENT-CERT:J2EE规范,公共钥匙(PKC),这是一种基于客户端证书的认证方式,比较安全。但缺陷是在没有安全证书的客户端无法使用。

<web-app>  
    ......  
    <login-config>  
        <auth-method>CLIENT-CERT</auth-method>  
    </login-config>  
    ......  
</web-app>

FORM:J2EE规范,数据完整性非常弱,没有加密,允许有定制的登陆界面

<web-app>
    ......
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.html</form-login-page>
            <form-error-page>/error.jsp</form-error-page>
        </form-login-config>
    </login-config>
    ......
</web-app>

(2) realm-name指定HTTP Basic验证中使用的领域名。

(3) form-login-config指定基于表单的登录中应该使用的登录页面和出错页面。如果没有使用基于表单的验证,则忽略这些元素。这个元素的定义如下,其中form-login-page用于指定显示登录页面的资源路径, form-error-page则用于指定用户登录失败时显示出错页面的资源路径。这两个页面路径都必须以a/开始,并与应用目录相对应。

<!ELEMENT form-login-config (form-login-page, form-error-page)>
<!ELEMENT form-login-page (#PCDATA)>
<!ELEMENT form-error-page (#PCDATA)>

值得注意的是,FORM认证的表单中,一些元素的属性必须是固定的,如:

表单的action=“j_security_check”, 表单提交方式method=”post”,用户名输入框name=”j_username”,密码输入框name=”j_password”

<form action="j_security_check" method="post" >  
    <input name="j_username" type="text">  
    <input name="j_password" type="password">  
    <input type="submit" value="login" >  
</form>

案例:

<security-constraint>
    <display-name>Login Page</display-name>
    <web-resource-collection>
        <web-resource-name>Login Page</web-resource-name>
        <url-pattern>/login.jsp</url-pattern>
        <http-method>GET</http-method>
        <http-method>PUT</http-method>
        <http-method>POST</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <description>Everyone</description>
        <role-name>everyone</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<security-role>
    <description>Everyone</description>
    <role-name>everyone</role-name>
</security-role>

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.html</form-error-page>
    </form-login-config>
</login-config>

时间: 2024-09-08 10:10:25

Java Web的安全验证机制的例子的相关文章

Java Web项目整体异常处理机制

在实际的j2ee项目中,系统内部难免会出现一些异常,如果把异常放任不管直接打印到浏览器可能会让用户感觉莫名其妙,也有可能让某些用户找到破解系统的方法. 出来工作一年时间了,我也大概对异常处理有了一些了解,在这呢小弟简单介绍下个人对异常处理的见解,抛砖引玉,希望各位大神提出宝贵的意见和建议. 就拿spring+struts2+hibernate项目说明:通常一个页面请求到后台以后,首先是到action(也就是所谓mvc的 controller),在action层会调用业务逻辑service,ser

Java web过滤器验证登录防止未登录进入界面_java

今天用ssh2写了个简单的系统,发现了一个问题,我这系统必须先登录成功才能进入主页,但我在浏览器里直接输入主页地址,发现也能进入,这个肯定不好,毫无安全性可言,后经查资料发现需要登录过滤器,就试了下,发现果然可以避免未经登录即可进入主页的危险,下面是我整理出的详细步骤: 1.首先写一个权限过滤filter类,实现Filter接口 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter

java web-求大神给个Java web工程中怎么实现权限的例子

问题描述 求大神给个Java web工程中怎么实现权限的例子 求大神给个Java web工程中怎么实现权限的例子(最好使用了 Struts). 解决方案 http://blog.csdn.net/wangzihu/article/details/7653244 解决方案二: http://canann.iteye.com/blog/1929180 参考Shiro,独立的权限框架. 解决方案三: http://edu.51cto.com/lesson/id-36761.html 解决方案四: ht

Java Web Framework综述

web Java Web Framework综述0.简介本文介绍Java Web Framework的基本工作原理,和一些常用的开源Web MVC Framework(Struts, Web Work, Tapestry, Echo, JSF, Maverick, Spring MVC, Turbine, Cocoon, Barracuda). Web开发的最重要的基本功是HTTP:Java Web开发的最重要的基本功是Servlet Specification.HTTP和Servlet Spe

Java Web技术经验总结(四)

Spring MVC中返回JSON数据的不同方法 Spring 3 MVC ContentNegotiatingViewResolver example,该视图解析器,可以用于将同一份模型数据展现为不同的表现形式,例如JSON.XML和RSS等: 利用@ResponseBody注解修饰控制器方法,并在xxx-servlet.xml中开启spring mvc支持--<mvc: annoation-driven/>,这种机制背后的原理是MessageConverter. 最近用Mockito写单元

新书出版:Java Web开发技术大全——JSP+Servlet+Struts 2+Hibernate+Sp

本文为原创,如需转载,请注明作者和出处,谢谢! 作者:李宁 图书详细信息: ISBN:9787302195757 定价:79.8元 印次:1-1 装帧:平装 印刷日期:2009-4-23   图书简介: SSH是目前最流行的Java Web开发技术.本书通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法.本书内 容包括Web客户端技术.JSP/Servlet技术.Struts 2(拦截器.类型转换.输入校验.上传和下载文件.Struts 2的各种标签.对 AJ

新书出版:Java Web开发技术大全——JSP+Servlet+Struts 2+Hibernate+Spring+Ajax (附源代码)

本文为原创,如需转载,请注明作者和出处,谢谢! 源代码下载 作者:李宁 图书详细信息: ISBN:9787302195757 定价:79.8元 印次:1-1 装帧:平装 印刷日期:2009-4-23 图书简介: SSH是目前最流行的Java Web开发技术.本书通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法.本书内 容包括Web客户端技术.JSP/Servlet技术.Struts 2(拦截器.类型转换.输入校验.上传和下载文件.Struts 2的各种标签.

ZenTaoPHP框架的数据验证机制

项目中数据验证在web应用中尤其显得重要.下面来给大家介绍下ZenTaoPHP框架的数据验证机制. 一.首先来确定一个问题,即验证的规则放在什么地方? mvc程序中,每一层都可以放验证规则.比如很多的表单验证,会自动根据用户的输入进行验证,然后给予提示.那么数据验证放在哪一层呢?这个问题网络上大家有很多的争议.有的人主要放在view这一层,有的则主张放在control层.禅道框架选择了model层. 为什么这样做呢?因为model层是最低的一层,所有的数据操作,都要经过model来进行处理.那么

利用 Java Web Start发布你用java程序

web|程序 前言:关于 JWSJWS 是作为 JSR-56 的一部分而创建的,目的是提供一种方法来分发在客户端上的 JVM 中运行的 Java 应用程序.JWS 包括以下特征: 部署 运行 JWS 应用程序包括选择 HTML 链接,与打开新的页面没有什么区别,惟一的不同之处在于 Web 服务器页面是 .jnlp 文件,该文件启动 JWS 插件来在客户端上本地下载和执行应用程序. 缓存 一旦应用程序下载完毕,就可以把它缓存在客户端电脑上.每当应用程序重新启动时,JWS 就检查服务器,查看是否有更