- 浏览: 3008761 次
- 性别:
- 来自: 河南
文章分类
- 全部博客 (340)
- Java综合 (26)
- 程序人生 (53)
- RIA-ExtJS专栏 (18)
- RIA-mxGraph专栏 (4)
- RIA-Flex4专栏 (43)
- 框架-Spring专栏 (16)
- 框架-持久化专栏 (22)
- 框架-Struts2专栏 (11)
- 框架-Struts专栏 (12)
- SQL/NOSQL (12)
- 报表/图表 (2)
- 工作流 (5)
- XML专栏 (4)
- 日常报错解决方案 (5)
- Web前端-综合 (12)
- Web/JSP (14)
- Web前端-ajax专栏 (14)
- Web前端-JQuery专栏 (9)
- IDE技巧 (6)
- FILE/IO (14)
- 远程服务调用 (2)
- SSO单点登录 (2)
- 资源分享 (22)
- 云计算 (1)
- 项目管理 (3)
- php专栏 (1)
- Python专栏 (2)
- Linux (1)
- 缓存系统 (1)
- 队列服务器 (1)
- 网络编程 (0)
- Node.js (1)
最新评论
-
hui1989106a:
我的也不能解压,360和好压都试了,都不行
《Spring in Action》完整中文版分享下载 -
temotemo:
这些example有些过时了,官方建议使用HBase-1.0 ...
Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询 -
zy8102:
非常感谢~
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
重命名了一下搞定了
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
为什么下载以后老解压不了呢?
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载
通常我们登录某网站,会有选择保存几天,或者是几个星期不用登录,之后输入该网站地址无需登录直接进入主页面,那么这就叫做自动登录,怎么实现呢,下面我以一个小例子来演示一下
登录页面:login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<form action="login.do">
用户名:<input type="text" name="username" ><br/>
密 码:<input type="text" name="password" ><br/>
<input type="submit" value="登录" /><select name="saveTime">
<option value="366">一年</option>
<option value="183">半年</option>
<option value="30">一个月</option>
<option value="7">一周</option>
</select>
</form>
</body>
</html>
那么从上面可看到可选择保存自动登录的期限,可以是一年,半年,一个月,一周,当然这都是以天为单位的
服务类:LoginService
package com.login.servlet;
public class LoginService {
public static boolean login(String username, String password) {
if ("admin".equals(username) && "123456".equals(password)) {
return true;
} else {
return false;
}
}
}
业务处理servlet:LoginServlet
package com.login.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
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 {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username=request.getParameter("username");
String password=request.getParameter("password");
String savetime=request.getParameter("saveTime");
if(LoginService.login(username, password)){
if(null!=savetime&&!savetime.isEmpty()){
int saveTime=Integer.parseInt(savetime);//这里接受的表单值为天来计算的
int seconds=saveTime*24*60*60;
Cookie cookie = new Cookie("user", username+"=="+password);
cookie.setMaxAge(seconds);
response.addCookie(cookie);
}
request.setAttribute("username",username);
request.getRequestDispatcher("/main.jsp").forward(request,response);
}else{
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
}
}
看清上面处理Cookie的方式步骤:其实这是为第一次登录该网站时【前提是选择了保存自动登录期限时间】处理Cookie,只要这一步处理成功,以后都无需经过这个Servlet因为我们接下来要在请求到达前,从Cookie中取出我们的用户名和密码,这样的话就需要一个过滤器了
package com.login.servlet;
import java.io.IOException;
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;
public class IndexFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
Cookie[] cookies = request.getCookies();
String[] cooks = null;
String username = null;
String password = null;
if (cookies != null) {
for (Cookie coo : cookies) {
String aa = coo.getValue();
cooks = aa.split("==");
if (cooks.length == 2) {
username = cooks[0];
password = cooks[1];
}
}
}
if (LoginService.login(username, password)) {
request.getSession().setAttribute("username",username);
response.sendRedirect("main.jsp");
//request.getRequestDispatcher("/main.jsp").forward(request, response);
}else{
arg2.doFilter(request,response );
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
我这里所说的请求到达之前,不是指的某个路径匹配的servlet而是指的就是在输入网址到达登录页面前就要进行自动登录的处理,那么web.xml中应该怎么配置呢
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.login.servlet.IndexFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.login.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
看见了没有,上面的filter匹配路径只是针对一个页面,与通常写/*匹配所有请求到达之前是不一样的写法哦
主页面:main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>My JSP 'maiin.jsp' starting page</title>
</head>
<body>
登录成功,欢迎${username}的到来
</body>
</html>
输入地址:http://localhost:8080/WebApp/login.jsp,出现登录页面
然后输入:admin,123456 ,选择一个保存日期
这样第一次登录成功之后,是经由LoginServlet处理了,由于选择了日期,所以Cookie中保存了用户信息,所以之后再输入同样地址后,不会出现登录页面,就不再经过LoginServlet处理【因为LoginServlet处理的是登陆页面上登录按钮请求的】,而直接提前交由IndexFilter处理,直接进入主页面,明白了么?
评论
10 楼
hl174
2015-12-25
zhuangjingyang 写道
密码放在cookie太危险了。博主最好申明下这是基础的教程。不然误人子弟了
那一般密码应该怎么处理,,不太懂这个
9 楼
zhuangjingyang
2015-09-02
密码放在cookie太危险了。博主最好申明下这是基础的教程。不然误人子弟了
8 楼
追梦--
2014-04-18
问下楼主 我写了一个桌面客户端 现在有账号密码和登录网站
怎么使得调用浏览器打开的是已经登录的网页
怎么使得调用浏览器打开的是已经登录的网页
7 楼
jiang_j2ee
2014-03-20
楼主遍历cookie里要判断cookie的name然后在取值。
6 楼
lixin_2002
2013-08-22
sbfivwsll 写道
圣诞王子 写道
sbfivwsll 写道
你居然把密码存放在cookie里边,非常不可取。
密码不放在cookie里面放在哪里,放的时候加密呗
加密也不安全。如果别人盗取了你的cookie,就绕过你的用户名和密码可以登录了。
cookie都能盗取了,就意味着别人都能操作你这台计算机了,还有什么东西是安全的?既然用户选择了"自动登录",就应该意识到有这个风险
5 楼
sbfivwsll
2013-06-10
圣诞王子 写道
sbfivwsll 写道
你居然把密码存放在cookie里边,非常不可取。
密码不放在cookie里面放在哪里,放的时候加密呗
加密也不安全。如果别人盗取了你的cookie,就绕过你的用户名和密码可以登录了。
4 楼
圣诞王子
2013-02-23
sbfivwsll 写道
你居然把密码存放在cookie里边,非常不可取。
密码不放在cookie里面放在哪里,放的时候加密呗
3 楼
sbfivwsll
2012-07-30
你居然把密码存放在cookie里边,非常不可取。
2 楼
JavaCrazyer
2010-09-27
南通ori 写道
楼主你好,这篇帖子写的很详细,我是个java初学者,我很想学好java,所以以后请多多指教咯~昨完照你的逻辑写了,呵呵,还是没调试出来,还是会出现登陆界面,可能是我不经意间出现了错误了。呵呵,有个问题想请教为什么过滤器的url-pattern 设置为/index.jsp,谢谢~~
你首先得明白filter是干嘛的,就会明白url为什么需要这么匹配
1 楼
南通ori
2010-09-26
楼主你好,这篇帖子写的很详细,我是个java初学者,我很想学好java,所以以后请多多指教咯~昨完照你的逻辑写了,呵呵,还是没调试出来,还是会出现登陆界面,可能是我不经意间出现了错误了。呵呵,有个问题想请教为什么过滤器的url-pattern 设置为/index.jsp,谢谢~~
发表评论
-
自定义分页标签详解
2010-11-18 14:57 19703关于自定义分页标签的使用,我想大家都见过许多人写过,我今天也来 ... -
Cookie与Session的区别
2010-11-09 22:04 2213旧题重谈,关于Cookie和S ... -
response.encodeURL的用法
2010-11-09 20:42 6560Java Servlet API 中引用 Sess ... -
request.getQuery()的用法
2010-11-09 20:16 3036request.getQueryString()主要用来获取参 ... -
各种系统框架图简介
2010-10-25 21:40 16719以下文字和架构图均在本人相关系统设计 和架构方案中有所应用。 ... -
登录保护:非法访问请先登录是怎么做到的
2010-10-12 17:19 2096平时我们浏览一些论坛时,经常会遇到这种情况,看到了一个论坛发帖 ... -
Web登录常用验证码功能
2010-10-12 15:45 7951目前大多网站登录时要么是回答一个问题,要么是输入验证码,主要是 ... -
sendRedirect和forward原理及区别总结
2010-09-23 14:23 27062一、原理. 1、 Forward ... -
WebRoot和WEB-INF下存放JSP页面的区别
2010-09-13 12:31 8578放在WebRoot下面:优点,程序结 ... -
Tomcat的Manager页面登陆解决方案
2010-09-09 13:37 5713http://blog.csdn.net/ruantao198 ... -
Tomcat下配置虚拟路径真管用
2010-04-26 11:08 2696昨天做上传时时是传到服务器webroot下的files目录下的 ... -
超链接指向中文文件下载成功了
2010-04-25 23:16 4978之前我谢过一片文章是关于显示中文图片的,没想到今天在下载方面派 ... -
怎样在页面上显示中文图片?
2010-03-23 09:44 1724一般来说,WEB前端展现的图片都是与项目存在相对路径的关系。所 ...
相关推荐
使用Java Servlet实现自动登录退出功能是Web应用程序中一个非常重要的功能,本文将详细介绍如何使用Java Servlet实现自动登录退出功能。 知识点1:了解Java Servlet Java Servlet是一个Java类库,用于开发基于Web...
Java代码自动生成工具是一种高效开发辅助软件,它能够根据预设的模板或规则,自动创建出符合特定规范的Java源代码。这样的工具极大地提升了开发效率,减少了程序员在编写重复性结构化代码上的时间,使他们可以更加...
这是我用java实现的具有自动点击功能的小程序,主要可以实现某些学习网站的自动学习
在Java开发中,实现自动补全功能是一种常见的需求,特别是在Web应用中,它可以极大地提高用户输入的效率和体验。这个项目使用了Java后端技术和AJAX前端技术来完成这一功能。接下来,我们将深入探讨如何利用Java和...
Java代码自动生成是一种提高开发效率的方法,通过自动化工具或框架,可以快速地生成常见的DAO、Service、Bean、XML配置以及View和Controller等代码模块。在Java开发中,这些组件是构成一个完整应用的基础架构,手动...
在Java Web开发中,实现一个具有“记住我”功能的登录页面是一项常见的需求。这个功能允许用户在选择“记住用户名和密码”后,下一次访问网站时,系统能自动填充登录表单,提供便捷的用户体验。这个过程涉及到浏览器...
Java代码实现短信猫发送短信是一项常见的通信应用,主要利用了串行通信技术。短信猫,又称GSM调制解调器,是一种硬件设备,通过USB或串口与计算机连接,可以实现短信的收发功能。在Java编程环境中,我们可以利用Java...
在网站开发中,实现自动登录功能是非常重要的,JAVA 通过 Session 和 Cookie 实现网站自动登录的技术是其中的一种方法。本文将详细介绍如何使用 Session 和 Cookie 实现网站自动登录的技术。 一、什么是 Session 和...
7. **HTTP协议**:了解HTTP的Request和Response结构,以及如何通过Cookie和Header传递信息,是实现自动登录的基础。 8. **JSP语法和指令**:JSP页面中可能包含Java代码片段(Scriptlets),EL(Expression Language...
ModelGoon是一款专为Java开发者设计的Eclipse插件,它以其便捷的功能,使得从java代码自动生成UML(统一建模语言)图形变得轻而易举。本文将详细介绍ModelGoon的主要功能、工作原理以及如何使用它来提升开发效率。 ...
逻辑处理类可以使用Java语言编写,利用Java的String类和ArrayList类等实现自动提示的逻辑。 SERVLET类 SERVLET类是用于处理输入条件的类,负责将输入条件传递给逻辑处理类,并将自动提示的结果返回给前台页面。...
Java 实现自动静默打印功能 在本篇文章中,我们主要讨论如何使用 Java 实现自动静默打印功能,实现无需弹出打印窗口即可直接打印的功能。下面将详细介绍实现思路、技术知识、技术细节和具体代码实现。 一、实现...
Java Web 实现自动登录功能 Java Web 实现自动登录功能是指在 Web 应用程序中实现用户自动登录的功能,这样可以提高用户体验和效率。本文将详细介绍 Java Web 实现自动登录功能的思路和实现方法。 一、自动登录...
这些框架通过解析数据库表结构,能够自动生成Service、Mapper、DAO以及实体类等相关的Java代码,帮助开发者快速构建基于数据库操作的应用。 2. **MyBatis-Plus**: MyBatis-Plus是在MyBatis的基础上扩展的,提供了更...
JRegKey是一个Java库,允许程序员在Java代码中读写Windows注册表。首先,你需要理解注册表键的结构,然后定位到QQ相关的键值,通常是`HKEY_CURRENT_USER\Software\Tencent\QQ\LoginInfo`。 2. **数据库操作**: `...
Java代码自动生成是一个...通过以上方法,开发者可以根据具体需求选择合适的方式实现Java代码自动生成,提升项目的可维护性和开发效率。在实际应用中,可以根据项目规模、团队习惯和技术栈来决定采用哪种代码生成策略。
本实例将探讨如何使用Java代码实现填充Word模板并生成Word合同。 首先,我们需要理解Apache POI库。Apache POI是Java平台上的一个开源项目,它允许Java应用程序读取、写入和修改Microsoft Office格式的文件,包括...
总结来说,"Oracle根据数据库自动生成JAVA代码"是一个集成开发环境(IDE)或代码生成工具的功能,它利用元数据信息自动生成Java项目的基本架构,包括实体类、DAO、Service、Controller以及前端HTML模板。这种自动化...
自动生成"我们可以进一步推断,这个项目的核心功能是自动化生成Java代码,可能是通过解析数据库模式(例如:表结构、字段类型等)来生成对应的实体类、Mapper接口及XML配置、Service接口及实现、Controller类等。...