J2EE的Servlet实现SSL(安全套接字层)会话

本文详细介绍了如何使用Session实现用户登录与会话跟踪。通过一系列Servlet代码实现登录验证、会话信息输出、注销操作,并配置了Session生命周期管理。文章重点展示了基于Cookie和URL重写的方法进行会话跟踪。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SSL(Secure Socket Layer,安全套接字层)是一种运行在TCP/IP之上和像HTTP这种应用层协议之下的加密技

术. SSL是在HTTPS协议中使用的加密技术.SSL可以让采用SSL的服务器认证采用SSL的客户端和服务器之间保持

一种加密的连接.在建立了加密连接的过程中,客户和服务器都可以产生名叫"会话密钥"的东东,它是一种用于加

密和解密消息的对称的密钥,基于HTTPS协议的服务器可以使用这个客户的对称密钥来建立会话.

我将采用一个登陆程序来演示Session的生命周期,刚开始,这个程序采用基于Cookie的会话跟踪,当客户端禁用

Cookie后,采用URL重写的机制来进行会话跟踪,实例的开发有以下几个步骤:
--------------------------
1. OutputSessionInfo.java
2. LoginServlet.java
3. LoginChkServlet.java
4. GreetServlet.java
5. LogouServlet.java
将写好的程序放入     C:\....ch01\src目录下
--------------------------
1.OutputSessionInfo.java

package org.ch01;     //名字空间自定.

import java.io.*;
import java.servlet.http.*;
import java.util.Date;

public class OutputSessionInfo
{
public static void printSessionInfo(PrintWriter out,HttpSession session)
{
     out.println("<table>");
     out.println("<tr>");
     out.println("<td>会话状态</td>");
     if(session.isNew())      //..isNew()判断是否新会话,并输出相应的会话状态;
     {
      out.println("<td>新的会话</td>");
     }else
     {
      out.println("<td>旧的会话</td>");
     }
     out.println("</tr>");
     out.println("<tr><td>会话</td><td>"+session.getId()+"</tr>");

     out.println("<tr><td>创建时间:</td><td>"+new Date(session.getCreationTime())

+"</td></tr>");
     out.println("<tr><td>上次访问时间:</td><td>"+new Date

(session.getLastAccessedTime())+"</td></tr>");
     out.println("<tr><td>最大不活动时间间隔:</td><td>"+ new Date

(session.getMaxInactiveInterval())+"</td></tr>);
     out.println("</table>");
}
}


以下是servlet代码:

loginservlet.java

package VO;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.PrintWriter;
import BO.OutputSessionInfo;
/**
*
* @author Administrator
* @version
*/
public class loginservlet extends HttpServlet {

     private String user;
     private String pwd;
     protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {
       
          resp.setContentType("text/html;charset=GBK");
   HttpSession session = req.getSession();
   user = (String)session.getAttribute("textname");
   /*
   pwd = (String)session.getAttribute("textpwd");
                 String username = req.getParameter("textname");
   PrintWriter out = resp.getWriter();
   out.println("<html>");
   out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
   out.println("<head><title><%="+username+" %>你已成功</title></head>");
   out.println("<body>");
                 out.println(username+"你已登陆!");
   OutputSessionInfo.printSessionInfo(out,session);
                 out.println("<a href="+resp.encodeURL("logout")+">注销</a>");
   out.println("</body>");
   out.println("</html>");
                 out.close();*/
   session.setAttribute("user_name",user);
                 resp.sendRedirect("index.jsp");
     }
   
     // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
     /** Handles the HTTP <code>GET</code> method.
      * @param request servlet request
      * @param response servlet response
      */
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
         processRequest(request, response);
     }
   
     /** Handles the HTTP <code>POST</code> method.
      * @param request servlet request
      * @param response servlet response
      */
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
         processRequest(request, response);
     }
   
     /** Returns a short description of the servlet.
      */
     public String getServletInfo() {
         return "Short description";
     }
     // </editor-fold>
}

以下是loginuser代码:


package VO;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.PrintWriter;
/**
*
* @author Administrator
* @version
*/
public class logoutservlet extends HttpServlet {
   
     /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
      * @param request servlet request
      * @param response servlet response
      */
     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
         response.setContentType("text/html;charset=UTF-8");
         PrintWriter out = response.getWriter();
         HttpSession session = request.getSession();
         session.invalidate();
         ///* TODO output your page here
         out.println("<html>");
         out.println("<head>");
         out.println("<title>Servlet logoutservlet</title>");
         out.println("</head>");
         out.println("<body>");
         out.println("<h1>已注销</h1>");
         out.println("<a href = index1.jsp>重新登陆</a>");
         out.println("</body>");
         out.println("</html>");
          //*/
         out.close();
     }
   
     // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
     /** Handles the HTTP <code>GET</code> method.
      * @param request servlet request
      * @param response servlet response
      */
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
         processRequest(request, response);
     }
   
     /** Handles the HTTP <code>POST</code> method.
      * @param request servlet request
      * @param response servlet response
      */
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
         processRequest(request, response);
     }
   
     /** Returns a short description of the servlet.
      */
     public String getServletInfo() {
         return "Short description";
     }
     // </editor-fold>
}


WEB.XML代码:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     version="2.4">
      <servlet>
         <servlet-name>loginservlet</servlet-name>
         <servlet-class>VO.loginservlet</servlet-class>
     </servlet>
     <servlet>
         <servlet-name>logoutservlet</servlet-name>
         <servlet-class>VO.logoutservlet</servlet-class>
     </servlet>
     <servlet>
   <servlet-name>sessionserver</servlet-name>
   <servlet-class>VO.sessionid</servlet-class>
</servlet>

     <servlet-mapping>
         <servlet-name>loginservlet</servlet-name>
         <url-pattern>/login</url-pattern>
     </servlet-mapping>
     <servlet-mapping>
         <servlet-name>logoutservlet</servlet-name>
         <url-pattern>/logout</url-pattern>
     </servlet-mapping>
    <servlet-mapping>
      <servlet-name>sessionserver</servlet-name>
      <url-pattern>/JSessionId</url-pattern>
    </servlet-mapping>
<session-config>
          <session-timeout>
              30
          </session-timeout>
</session-config>
   <!-- ================ Security Constraints for Testing =============== -->

<!--
   <security-constraint>
     <web-resource-collection>
       <web-resource-name>The Entire Web Application</web-resource-name>
       <url-pattern>/*</url-pattern>
     </web-resource-collection>
     <auth-constraint>
       <role-name>tomcat</role-name>
     </auth-constraint>
   </security-constraint>

   <login-config>
     <auth-method>BASIC</auth-method>
     <realm-name>Tomcat Supported Realm</realm-name>
   </login-config>

   <security-role>
     <description>
       An example role defined in "conf/tomcat-users.xml"
     </description>
     <role-name>tomcat</role-name>
   </security-role>
-->

   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
         <welcome-file>index.html</welcome-file>
         <welcome-file>index.htm</welcome-file>
         <welcome-file>default.html</welcome-file>
         <welcome-file>default.htm</welcome-file>
         <welcome-file>default.jsp</welcome-file>

   </welcome-file-list> 

</web-app>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值