269790.html

预期的效果:

以百度为例:

一: 登陆界面,显示下次自动登录—选中

\


二:点击登录,完成登录实现跳转。。。


<喎�”/kf/ware/vc/” target=”_blank” class=”keylink”>vcD4KPC9oMj4KPGJyPgoKPGltZyBzcmM9”/uploadfile/Collfiles/20140103/2014010309114146.jpg” alt=”\”>


三:关闭页面:重新打开百度。。。


\


四:实现自动登录。。。完成跳转。。。


\


自我分析后,使用session,cookie filter 等技术实现基本功能。


代码区:

一:实体bean:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package www.csdn.net.day56.bean;
 
public class Admin {
 
     private Integer id;
     private String name;
     
     private String pass;
 
     public Admin() {
         super ();
         // TODO Auto-generated constructor stub
     }
 
     public Admin(Integer id, String name, String pass) {
         super ();
         this .id = id;
         this .name = name;
         this .pass = pass;
     }
 
     public Integer getId() {
         return id;
     }
 
     public void setId(Integer id) {
         this .id = id;
     }
 
     public String getName() {
         return name;
     }
 
     public void setName(String name) {
         this .name = name;
     }
 
     public String getPass() {
         return pass;
     }
 
     public void setPass(String pass) {
         this .pass = pass;
     }
 
     @Override
     public String toString() {
         return "Admin [id=" + id + ", name=" + name + ", pass=" + pass + "]" ;
     }
     
     
     
     
 
     
}

二:AdminDao 接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package www.csdn.net.day56.dao;
 
import www.csdn.net.day56.bean.Admin;
 
public interface AdminDao extends BaseDao {
 
     /**
      *  用户登录验证的 操作
      * @param name
      * @param pass
      * @return
      */
     public Admin checkLogin(String name,String pass);
     
     /**
      *
      * @param name
      * @return
      */
     public Admin checkLogin(String name);
}
</admin,>

三:Admin dao Impl 类 实现 AdminDao 的接口方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package www.csdn.net.day56.dao.impl;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
import www.csdn.net.day56.bean.Admin;
import www.csdn.net.day56.dao.AdminDao;
import www.csdn.net.day56.util.DBConn;
 
public class AdminDaoImpl implements AdminDao{
 
     private Connection conn;
     private PreparedStatement pstmt;
     private ResultSet rs;
     
     
     @Override
     public Admin checkLogin(String name, String pass) {
         Admin entity= null ;
         conn=DBConn.getConn();
         String sql= "select id, name,pass from admin where name=? and pass=?" ;
         try {
             pstmt=conn.prepareStatement(sql);
             int index= 1 ;
             pstmt.setString(index++, name);
             pstmt.setString(index++, pass);
             rs=pstmt.executeQuery();
             if (rs.next()){
                 entity= new Admin(rs.getInt( "id" ), rs.getString( "name" ), rs.getString( "pass" ));
                 
             }
         } catch (SQLException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } finally {
             DBConn.release(rs, pstmt);
         }
         return entity;
     }
 
     @Override
     public Admin checkLogin(String name) {
         Admin entity= null ;
         conn=DBConn.getConn();
         String sql= "select id, name,pass from admin where name=?" ;
         try {
             pstmt=conn.prepareStatement(sql);
             int index= 1 ;
             pstmt.setString(index++, name);
             
             rs=pstmt.executeQuery();
             if (rs.next()){
                 entity= new Admin(rs.getInt( "id" ), rs.getString( "name" ), rs.getString( "pass" ));
                 
             }
         } catch (SQLException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } finally {
             DBConn.release(rs, pstmt);
         }
         return entity;
     }
 
     
}

四:Admin Service 用来处理事务 或日志的接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package www.csdn.net.day56.service;
 
import www.csdn.net.day56.bean.Admin;
 
public interface AdminService extends BaseService{
 
     /**
      * 用户登录验证的操作
      * @param name
      * @param pass
      * @return
      */
     public Admin checkLogin(String name,String pass);
     
     
     /**
      *
      * @param name
      * @return
      */
     public Admin checkLogin(String name);
     
}
</admin,>

五:Admin Service Impl 实现类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package www.csdn.net.day56.service;
 
import www.csdn.net.day56.bean.Admin;
import www.csdn.net.day56.dao.AdminDao;
import www.csdn.net.day56.dao.impl.AdminDaoImpl;
 
public class AdminServiceImpl implements AdminService {
 
     private AdminDao adminDao = new AdminDaoImpl();
     
     @Override
     public Admin checkLogin(String name, String pass) {
         System.out.println( "。。。。记录日志操作。。。。。。。。" );
         Admin entity=adminDao.checkLogin(name, pass);
         return entity;
     }
 
     @Override
     public Admin checkLogin(String name) {
     
         return adminDao.checkLogin(name);
     }
 
}

六: index.jsp 一个登录链接,跳转到loginServlet—- 经过filter过滤器

?
1
登录

七:autoLoginFilter 过滤器,对session会话,及cookie 等的检测

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package www.csdn.net.day56.filter;
 
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import sun.misc.BASE64Encoder;
import www.csdn.net.day56.bean.Admin;
import www.csdn.net.day56.service.AdminService;
import www.csdn.net.day56.service.AdminServiceImpl;
 
public class AutoLoginFilter implements Filter {
 
     @Override
     public void destroy() {
         // TODO Auto-generated method stub
         
     }
 
     @Override
     public void doFilter(ServletRequest req, ServletResponse res,
             FilterChain chain) throws IOException, ServletException {
         // 第一步造型
         HttpServletRequest request=(HttpServletRequest) req;
         HttpServletResponse response=(HttpServletResponse) res;
         // 1. 首先判断session 中 有没有 admin
         Object object=request.getSession().getAttribute( "admin" );
         if (object!= null ){
             request.getRequestDispatcher( "./sc.jsp" ).forward(request, response);
          return ;   
         }
         // 第二步 判断cookie 中是否存在
         Cookie autoCookie= null ;
         Cookie cookies[]=request.getCookies();
         if (cookies!= null ){
             // 遍历cookie
             for (Cookie cookie : cookies) {
                 // 判断cookie 中是否有autologin 标示符的cookie
                 if ( "autologin" .equals(cookie.getName())){
                     autoCookie=cookie; // 赋值
                 }
             }
             System.out.println( "----------" +autoCookie+ "------" );
             //判断cookie 中是否有
             if (autoCookie == null ){
                 chain.doFilter(request,response);
                 return ;
             }
             
             System.out.println( "+++++++++++" +autoCookie);
             // 判断 cookie 的值
             // 获取cookie 的值
             String value=autoCookie.getValue();
             // 拆分
             String temp[]=value.split( ":" );
             System.out.println( "length::::::::;;" +temp.length);
             // 判断长度 对否等于自己拼凑的长度
             if (temp.length!= 3 ){
                 chain.doFilter(request, response);
                 return ;
             }
             String name=temp[ 0 ];
             String time=temp[ 1 ];
             String service_md5Value=temp[ 2 ];
             System.out.println(Long.valueOf(time)+ "----- 时间------" +System.currentTimeMillis());
             // 判断是否失效
             if (Long.valueOf(time)<=System.currentTimeMillis()){
                 chain.doFilter(request, response);
                 return ;
             }
             // 根据用户名去查询永华
             AdminService adminService= new AdminServiceImpl();
             // 查询用户
             Admin entity=adminService.checkLogin(name);
             System.out.println( "-------- 重新查询" +entity);
             if (entity== null ){
                 chain.doFilter(request, response);
                 return ;
             }
             // 拼接的字符
             String md5Temp=entity.getName()+ ":" +entity.getPass()+ ":" +time;
             System.out.println(md5Temp+ "-----" +service_md5Value);
             if (!(md5Value(md5Temp).equals(service_md5Value))){
                 chain.doFilter(request, response);
                 return ;
             }
             request.getSession().setAttribute( "admin" , entity);
             request.getRequestDispatcher( "./sc.jsp" ).forward(request, response);
             } else {
                 chain.doFilter(request, response);
                 return ;
             }
         
     }
 
     @Override
     public void init(FilterConfig arg0) throws ServletException {
         // TODO Auto-generated method stub
         
     }
     
 
     public String md5Value(String value) {
         try {
             MessageDigest digest = MessageDigest.getInstance( "md5" );
             byte result[] = digest.digest(value.getBytes());
             BASE64Encoder encoder = new BASE64Encoder();
             return encoder.encode(result);
         } catch (NoSuchAlgorithmException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return "" ;
     }
 
<p>} </p><h3>filter 在xml 文件中的描述信息</h3>
?
1
2
3
4
5
6
7
8
<filter>
   <filter-name>AutoLoginFilter</filter-name>
   <filter- class >www.csdn.net.day56.filter.AutoLoginFilter</filter- class >
</filter>
<filter-mapping>
   <filter-name>AutoLoginFilter</filter-name>
   <url-pattern>/login. do </url-pattern>
</filter-mapping>

八:loginServlet —实现转发—-login.jsp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package www.csdn.net.day56.servlet;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class LoginServlet extends HttpServlet {
 
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
         request.getRequestDispatcher( "./login.jsp" ).forward(request, response);
         
     }
 
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
          this .doGet(request, response);
     }
 
<p>}</p>

loginServlet 在xml 中的 描述信息:

?
1
2
3
4
5
6
7
8
9
<servlet>
   <servlet-name>LoginServlet</servlet-name>
   <servlet- class >www.csdn.net.day56.servlet.LoginServlet</servlet- class >
</servlet>
 
<servlet-mapping>
   <servlet-name>LoginServlet</servlet-name>
   <url-pattern>/login. do </url-pattern>
</servlet-mapping>

九:登陆界面,表单提交到AdminServlet

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %>
<% @include file= "/common/tag.jsp" %>
<% @include file= "/common/jquery.jsp" %>
 
 
 
   
 
     
     <title>My JSP 'index.jsp' starting page</title>
     <meta http-equiv= "pragma" content= "no-cache" >
     <meta http-equiv= "cache-control" content= "no-cache" >
     <meta http-equiv= "expires" content= "0" >   
     <meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" >
     <meta http-equiv= "description" content= "This is my page" >
     <!--
     <link rel= "stylesheet" type= "text/css" href= "styles.css" >
     -->
   
   
   
    ${requestScope.msg}&lt;br&gt;</code></div><div class="line number23 index22 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;</code><code class="java plain">&lt;form action=</code><code class="java string">"${pageContext.request.contextPath }/AdminOper.do" method= "get" >
     <table>
     <tbody><tr>
     <td>用户名:</td>
     <td><input type= "text" name= "name" ></td>
     </tr>
     <tr>
     <td>密码</td>
     <td><input type= "password" name= "pass" ></td>
     </tr>
     <tr>
     <td colspan= "2" >
     <input type= "radio" name= "day" value= "1" > 一天
     <input type= "radio" name= "day" value= "7" > 一周
     <input type= "radio" name= "day" value= "15" > 半月
     <input type= "radio" name= "day" value= "30" > 一月
     <input type= "radio" name= "day" value= "180" > 半年
     <input type= "radio" name= "day" value= "360" > 一年
     </td>
     </tr>
     <tr>
     <td><input type= "checkbox" name= "mark" value= "mark" ></td>
     <td>下次自动登录</td>
     </tr>
     <tr>
     <td><input type= "submit" value= "登录" ></td>
     <td><input type= "reset" value= "重置" ></td>
     </tr>
     </tbody></table>
    <input type= "hidden" name= "oper" value= "login" >
    </form>
  

十:AdminServlet—实现对用户的验证及cookie,session 的存储调用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package www.csdn.net.day56.servlet;
 
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import sun.misc.BASE64Encoder;
 
import com.sun.mail.util.BASE64EncoderStream;
 
import www.csdn.net.day56.bean.Admin;
import www.csdn.net.day56.service.AdminService;
import www.csdn.net.day56.service.AdminServiceImpl;
 
public class AdminServlet extends HttpServlet {
 
     private AdminService adminService = new AdminServiceImpl();
     private int expires = 7 * 24 * 60 * 60 ; // 7 就是天数
 
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         // 获取 请求的 方法
         String method = request.getMethod();
         String oper = request.getParameter( "oper" );
         if ( "login" .equals(oper)) {
 
             String name = request.getParameter( "name" );
             String pass = request.getParameter( "pass" );
             String mark = request.getParameter( "mark" );
 
             System.out.println(name + pass + mark + "===========" );
             // 验证用户名和密码是否正确
             Admin entity = adminService.checkLogin(name, pass);
             if (entity != null ) {
                 if ( "mark" .equals(mark)) {
                     // 声明 cookie
                     Cookie autoCookie = null ;
                     // 获取所有的 cookie
                     Cookie cookies[] = request.getCookies();
                     // 遍历cookie
                     for (Cookie cookie : cookies) {
                         // 判断是否存在自动登录记录
                         if ( "autologin" .equals(cookie.getName())) {
                             autoCookie = cookie; // 赋值
                             // 当cookie 存在的时候 我需要重新设置值
                             long time = System.currentTimeMillis() + expires
                                     * 1000 ;
                             String newValue = name + ":" + time + ":"
                                     + md5Value(name + ":" + pass + ":" + time);
                             cookie.setValue(newValue);
                         } else {
                             // 不在创建
                             long time = System.currentTimeMillis() + expires
                                     * 1000 ;
                             String cookieValue = name + ":" + time + ":"
                                     + md5Value(name + ":" + pass + ":" + time);
                             autoCookie = new Cookie( "autologin" , cookieValue);
                         }
                     }
 
                     autoCookie.setMaxAge(expires); // 10 分钟
                     response.addCookie(autoCookie); // 添加里边去了
                 }
                 // admin 存入到 session
                 request.getSession().setAttribute( "admin" , entity);
                 request.getRequestDispatcher( "./sc.jsp" ).forward(request,
                         response);
             } else {
                 request.setAttribute( "msg" , "用户名 或密码错误" );
                 request.getRequestDispatcher( ",/index.jsp" ).forward(request,
                         response);
             }
         }
     }
 
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         this .doGet(request, response);
     }
 
     public String md5Value(String value) {
         MessageDigest digest;
         try {
             digest = MessageDigest.getInstance( "md5" );
             byte result[] = digest.digest(value.getBytes());
             BASE64Encoder encoder = new BASE64Encoder();
             return encoder.encode(result);
         } catch (NoSuchAlgorithmException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return "" ;
     }
 
}

AdminServlet 在web.xml 的描述信息:

?
1
2
3
4
5
6
7
8
9
<servlet>
     <servlet-name>AdminServlet</servlet-name>
     <servlet- class >www.csdn.net.day56.servlet.AdminServlet</servlet- class >
   </servlet>
 
   <servlet-mapping>
     <servlet-name>AdminServlet</servlet-name>
     <url-pattern>/AdminOper. do </url-pattern>
   </servlet-mapping>


十一:检测成功:跳转到指定的界面–显示登录人的信息

?
1
欢迎${sessionScope.admin.name}登录<br>


效果展示:

一:输入指定的地址:点击登录:

\

二:提交表单: 跳转到指定的jsp 页面:

\

三:跳转到指定页面–显示登录信息\

四:重新打开index 界面–点击登录将直接跳转到登录成功页面—这是session会话的作用

\
\

五:关闭Tomact–session会话结束–用来检测cookie


\

以上是使用filter,cookie,session等技术是小的效果。。。仅供参考。。。希望能给大家解除疑惑






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值