servlet 认证,授权

           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>
 

   例如上面我们声明了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>

    例如现在我们要对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>

    <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.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>

   其中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协议,其实就是为我们的服务器生成一个证书,大家可以参考网上的资料。

  完毕。

   


   

     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值