容器管理安全最普遍的类型建立在基于表单的身份验证方式上。

通过这样的方式,server自己主动将尚未验证的用户重定向到一个HTML表单。检查他们的username和password,决定他们属于哪个角色逻辑。并检查他们的角色是否有权限訪问正在申请的资源。接着,基于表单的验证使用会话跟踪技术跟踪已经通过的用户。

在声明式中,它具有下面的长处和缺点:

长处:登陆表单和站点其它网页有一致的页面

缺点:若client浏览器禁用了cookie或server可能配置为总是使用URL重写,会话跟踪就会失败。

过程例如以下:

(1)设置username、password和角色 --> 由web容器承担,这里使用tomcat7.0作为配置

这里有2种方式,一种是通过tomcat_dir/conf/tomcat-user.xml将角色将username、角色、password保存在配置文件。还有一种是通过JDBCRealm将信息配置到mysql数据库中,Realm相关知识可看 http://blog.csdn.net/big1980/article/details/8613051,主要通过 tomcat_dir/conf/ server.xml 进行配置选择

【配置1 tomcat-user.xml】

在server.xml(默认) 中

<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
</pre><pre name="code" class="html"> <GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>

在tomcat-user.xml中定义自己的角色用户和password

<?

xml version='1.0' encoding='utf-8'?

>
<tomcat-users>
<role rolename="admin"/>
<role rolename="visitor"/>
<user username="web" password="xxxxxx" roles="visitor"/>
<user username="raysor" password="xxxxxx" roles="admin"/>
</tomcat-users>

【配置2JDBCRealm】

<Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/DBNAME"
connectionName="name" connectionPassword="password"
userTable="TABLE_NAME" userNameCol="COLUMN_NAME"
userCredCol="COLUMN_Password"
userRoleTable="ROLE_TABLE" roleNameCol="COLUMN_ROLE" />

当中:

driverName
驱动名字

connectionURL         数据库连接url

connectionName 连接的username

connectionPassword 连接的password

userTable                     用户表

userNameCol  username列

须要注意:tomcat-lib下是没有mysql的jar包需放入,并且貌似tomcat7開始已经不支持上面的写法。还好我看了tomcat8的wiki,假设这样写是url错误连不上,没有权限,得用

connectionURL="jdbc:mysql://localhost:3306/authorization?user=root&password=xxxxxx"

(2)指定login页面和login-failure页面的位置 web.xml

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

(3)创建登陆页面login.jsp——表单中必须含有j_security_check的Action、method为POST,名称为j_username的文本字段和名为j_password的密码域

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

(4)创建登陆失败页面login-error.html

(5)指定哪些url须要password保护(相同在web.xml中)

<security-constraint>
<web-resource-collection>
<web-resource-name>Sensitive</web-resource-name>
<url-pattern>/sensitive/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>administrator</role-name>
<role-name>executive</role-name>
</auth-constraint>
</security-constraint>

(6)列出全部可能的抽象角色(用户类型)——全部可能的抽象角色必须在web.xml列出来

<security-role>
<role-name>administrator</role-name>
</security-role>
<security-role>
<role-name>executive</role-name>
</security-role>

(7)指定哪些URL仅仅能通过SSL訪问(web.xml)

<security-constraint>
<user-data-constraint>
<!—使用CONFIDENTIAL意味着使用一种方式来传输-->
<transport-guarantee>CONFIDENTIAL</ transport-guarantee >
</user-data-constraint>
</security-constraint>

(8)关闭Invoker servlet---Tomcat 7实现的Servlet 3.0标准不再支持这个InvokerServlet类

JavaWeb应用中的身份验证(声明式)——基于表单的身份认证的更多相关文章

  1. 【FBA】SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

    //http://www.cnblogs.com/OceanEyes/p/custom-provider-in-sharepoint-2013-fba-authentication.html 由于项目 ...

  2. [FBA]SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

    //http://tech.ddvip.com/2014-05/1401197453210723.html 由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取 ...

  3. SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

    由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取,而不是从Domain中获取,所以需要对SharePoint Application的身份验证(Claims ...

  4. SharePoint 2013 配置基于表单的身份认证

    前 言 这里简单介绍一下为SharePoint 2013 配置基于表单的身份认证,简单的说,就是用Net提供的工具创建数据库,然后配置SharePoint 管理中心.STS服务.Web应用程序的三处w ...

  5. 基于表单的身份验证(FBA)

    https://technet.microsoft.com/zh-cn/library/ee806890(office.15).aspx http://www.tuicool.com/articles ...

  6. ASP.NET MVC 4 (十三) 基于表单的身份验证

    在前面的章节中我们知道可以在MVC应用程序中使用[Authorize]特性来限制用户对某些网址(控制器/控制器方法)的访问,但这都是在对用户认证之后,而用户的认证则依然是使用ASP.NET平台的认证机 ...

  7. asp.net 如何配置authentication,完成基于表单的身份验证

    步骤一: 在根目录下的web.config中加入: <system.web> <authentication mode="Forms">           ...

  8. SharePoint 2013 基于表单 Membership 的身份验证

    其实关于SharePoint 2013 表单身份验证网上已经有很多了,比如SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authenticatio ...

  9. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

随机推荐

  1. Swift学习笔记(二十二)——字典的基本操作

    (1)计算字典长度 . (2)推断字典是否为空 . (3)查询字典元素 . (4)取出字典元素进行拼接 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/fo ...

  2. 【C++/数据结构】顺序表的基本操作

    <span style="font-size:18px;"><strong>#pragma once #include <iostream> u ...

  3. SharePoint创建一个简单的Visio Web部件图

    SharePoint创建一个简单的Visio Web部件图 Visio有很多强大的Mash-up混聚功能,使它能够轻松集成到SharePoint 2010中. 1. 打开Visio 2010,创建新的 ...

  4. contest hunter 6803 导弹防御塔

    没什么好写的.写写这题吧 拆点,把一个防御塔拆成m个,表示第i次攻击.瞎yy就好啊 #include<cstdio> #include<iostream> #include&l ...

  5. 数据科学的完整学习路径(Python版)

    转载自:http://python.jobbole.com/80981/ 英文(原文)连接:https://www.analyticsvidhya.com/learning-paths-data-sc ...

  6. Sql Server 优化----SQL语句的执行方式与锁以及阻塞的关系

    阻塞原因之一是不同的Session在访问同一张表的时候因为不兼容锁的原因造成的, 当前执行的SQL语句是否被阻塞(或者死锁),不仅跟当前表上的已有的锁有关,也会跟当前执行的SQL语句的执行方式有关 简 ...

  7. HDFS开发中的一些问题(逐步补充)

    1.windows操作系统下运行时报:Failed to locate the winutils binary in the hadoop binary path   java.io.IOExcept ...

  8. 模拟试题B

    模拟试题B 一.单项选择题(2′*8 =16′) 1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( ) A)512KB B)1MB C)2MB D)3MB 2.在多 ...

  9. mac安装win10后触摸板没有右键功能键的添加技巧

    一些mac用户也会在自己的笔记本电脑上安装windows10系统. 但最近有部分用户发现,安装上win10正式版后,发现无论点击触摸板哪个位置,都只有左键,根本无法右键的问题, 针对此问题,现笔者分享 ...

  10. SQL增删改

    USE sqlxx CREATE TABLE ygb( sid INT, sname VARCHAR(20), sgender VARCHAR(2), sbirthday DATE, semail V ...