servlet 认证,授权
来源:互联网 发布:苹果udid定制软件 编辑:程序博客网 时间:2024/05/01 12:31
http://blog.csdn.net/linshizhan/article/details/7792707
servlet安全分为四类:认证,授权,数据完整性,机密性。
有时候我们的某个网页,可能不允许所有人查看,如有些机密消息只有高级会员查看,这时候我们该如何处理?我们怎么判断访问网页的这个人就是本人,而不是其他人冒充的呢?
servlet中的认证和授权就能解决这个问题,认证就是验证是否是本人,验证是否是本人的方法就是能否输入正确的用户名和密码。授权就是用户账户和密码匹配后,查看该用户的角色,是否有查看相关资源的权限。
在tomcat中conf文件夹下tomcat-users.xml中,我们可以定义角色 和相应账户的账户名,密码,和角色信息。
- <tomcat-users>
- <role rolename="member"/>
- <role rolename="guest"/>
- <user username="shizhan" password="shizhan" roles="member"/>
- <user username="xxx" password="xxx" roles="guest"/>
- </tomcat-users>
<tomcat-users> <role rolename="member"/> <role rolename="guest"/> <user username="shizhan" password="shizhan" roles="member"/> <user username="xxx" password="xxx" roles="guest"/></tomcat-users>
例如上面我们声明了member和guest两个角色。
并且声明了两个用户,shizhan和xxx,角色分别为member和guest。
在web.xml中,我们可以通过 <security-role>把我们定义的角色告诉web应用。
- <security-role>
- <role-name>member</role-name>
- </security-role>
- <security-role>
- <role-name>guest</role-name>
- </security-role>
<security-role> <role-name>member</role-name> </security-role> <security-role> <role-name>guest</role-name> </security-role>
例如现在我们要对url为/TestSafeLogin的servlet进行认证和授权,可以这么声明
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>demo</web-resource-name>
- <url-pattern>/TestSafeLogin</url-pattern>
- <http-method>GET</http-method>
- <http-method>POST</http-method>
- </web-resource-collection>
- <auth-constraint>
- <role-name>member</role-name>
- </auth-constraint>
- <user-data-constraint>
- <transport-guarantee>CONFIDENTIAL</transport-guarantee>
- </user-data-constraint>
- </security-constraint>
<security-constraint> <web-resource-collection> <web-resource-name>demo</web-resource-name> <url-pattern>/TestSafeLogin</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>member</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
<web-resource-name>demo</web-resource-name>这个标签没有实质作用。
<url-pattern>/TestSafeLogin</url-pattern>请求哪个servlet必须进行验证。
<http-method>GET</http-method> <http-method>POST</http-method>请求这个servlet的get和post请求才进行验证。
<auth-constraint>
<role-name>member</role-name>
</auth-constraint> 表示只有会员这个角色才能查看。
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>表示传输用户名和密码的时候,利用https协议进行加密传输。
上面定义了只有会员的角色才能对/TestSafeLogin这个资源进行get和post请求,而且用户名和密码传输过程中使用https协议进行传输。
可是当我们访问了这个资源后,容器利用什么方式要求用户输入用户名和密码呢?
这里有四种认证方式:
1:基本认证(采用base64编码)
2:摘要(digest)认证
3:客户证书(client-cert)是以一种非常安全的形式进行传输登录信息,使用了公共密钥证书,缺点是客户必须有证书才能登录你的系统。
4:表单认证(form),可以根据合法的html建立登录表单,四种认证中,表单认证是最不安全的。
下面我们以表单认证来演示我们的例子。在web.xml中配置
- <login-config>
- <auth-method>FORM</auth-method>
- <form-login-config>
- <form-login-page>/login.html</form-login-page>
- <form-error-page>/loginerror.html</form-error-page>
- </form-login-config>
- </login-config>
<login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.html</form-login-page> <form-error-page>/loginerror.html</form-error-page> </form-login-config> </login-config>
表示需要客户输入用户名和密码的时候,跳转到login.html,当输入错误的时候跳转到loginerror.html,并且以表单的方式提交。
下面看看login.html
- <!DOCTYPE html>
- <html>
- <head>
- <title>login.html</title>
- </head>
- <body>
- <form method="post" action="j_security_check">
- 用户名<input type="text" name="j_username"/><br/>
- 密码 <input type="text" name="j_password"/><br/>
- <input type="submit" value="登录"/>
- </form>
- </body>
- </html>
<!DOCTYPE html><html> <head> <title>login.html</title> </head> <body> <form method="post" action="j_security_check"> 用户名<input type="text" name="j_username"/><br/> 密码 <input type="text" name="j_password"/><br/> <input type="submit" value="登录"/> </form> </body></html>
其中action的值等于j_security_check,用户名的name是j_username,密码的name是j_password,这些都是规定好的,不可改变。
既然表单认证是最不安全的,那么怎么保证我们的信息传输的安全性呢?
其实java ee规范中有传输层的安全性规范,我们可以使用
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>来进行配置,上面我们已经配置过了,他使用的是ssl协议进行加密。
现在一切都准备好了,我们还必须对tomcat配置ssl协议,其实就是为我们的服务器生成一个证书,大家可以参考网上的资料。
完毕。
- servlet 认证,授权
- servlet 认证,授权
- AAA认证、授权、计费
- FluorineFx:认证与授权
- AAA认证、授权、计费
- OAUTH认证授权流程
- 授权认证 OAuth
- 认证授权框架
- 认证授权和审计
- 认证与授权
- indenty 自定义认证 授权。
- shiro认证授权流程
- OAUTH认证授权原理
- Shiro ---身份认证、授权
- 自定义认证授权Realm
- OAuth认证授权流程
- mongodb之认证授权
- OAuth认证与授权
- OC中对象的常用方法
- YUV颜色空间介绍
- 每天一个小程序(4)——顺序栈
- crtmpserver流媒体服务器的介绍与搭建
- 11款Java工具:源代码优化与分析
- servlet 认证,授权
- 智能指针weak_ptr用途
- 使用Android adb命令来启动Android应用程序
- system()函数
- OC中的类目与协议
- Oracle数据库备份与恢复精华资料集锦
- Failover and Load balancing in Oracle
- VS的内存泄漏检查
- Hibernate主键生成策略