用来将页面传入的信息进行分析处理的服务器类,
package servlet;
import java.io.IOException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.jms.Message;
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 com.sun.mail.util.BASE64DecoderStream;
import com.sun.mail.util.BASE64EncoderStream;
import service.AdminService;
import serviceImpl.AdminServiceImpl;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import bean.Admin;
public class AdminServlet extends HttpServlet {
private AdminService adminService = new AdminServiceImpl();
// 规定时间常量,为一天
private final int EXPIRES = 60 * 60 * 24 ;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// request.setCharacterEncoding("UTF-8");
String oper = request.getParameter( "oper" );
if ( "adminLogin" .equals(oper)) {
adminLogin(request, response);
}
if ( "login" .equals(oper)) {
request.getRequestDispatcher( "./login.jsp" ).forward(request,
response);
}
}
private void adminLogin(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//获取表单提交的数据
String name = request.getParameter( "name" );
String pass = request.getParameter( "pass" );
String mark = request.getParameter( "mark" );
String day = request.getParameter( "day" );
// System.out.println(name + "====" + pass + "====" + mark
// + "============" + day);
//根据获取的数据向数据库发送数据请求,
Admin entity = adminService.checkLogin(name, pass);
//判断查询结果
if (entity != null ) {
//判断用户是否进行记录密码和自动登陆的操作
if ( "mark" .equals(mark)) {
// 获取当前的时间并加上要保存的时间长度
long time = System.currentTimeMillis()
+ (EXPIRES * Integer.valueOf(day)* 1000 );
// 声明cookie
Cookie autoCookie = null ;
// 获取所有的cookie的数组
Cookie cookies[] = request.getCookies();
// 遍历判断
for (Cookie cookie : cookies) {
// 判断是否已经存在cookie记录
if ( "autoLogin" .equals(cookie.getName())) {
// 存在即直接赋值
autoCookie = cookie;
// 并改变内容
String newValue = name
+ ":"
+ time
+ ":"
+ md5Value(pass + ":" + name + ":" + time
+ ":donghongyujava" );
autoCookie.setValue(newValue);
} else {
String cookieValue = name
+ ":"
+ time
+ ":"
+ md5Value(pass + ":" + name + ":" + time
+ ":donghongyujava" );
/*
* Control character in cookie value or attribute.
* 当存入的数据是中文时,cookie会出现乱码现象 需要进行编码的转换
*/
autoCookie = new Cookie( "autoLogin" , URLEncoder.encode(
cookieValue, "UTF-8" ));
}
}
// 设置cookie的最长的存活时间
autoCookie.setMaxAge(EXPIRES * Integer.valueOf(day));
response.addCookie(autoCookie);
}
// 将admin存入到session
request.getSession().setAttribute( "admin" , entity);
// 设置成功后就登陆操作
request.getRequestDispatcher( "./sc.jsp" ).forward(request, response);
} else {
request.setAttribute( "msg" , "用户名或密码错误请重试" );
request.getRequestDispatcher( "./login.jsp" ).forward(request,
response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this .doGet(request, response);
}
//加密的操作方法
public String md5Value(String value) {
try {
// 获取md5加密的对象
MessageDigest digest = MessageDigest.getInstance( "md5" );
// 将传入的数据装换为byte字节,在用digest进行转换(加密)成新的字节数组,
byte result[] = digest.digest(value.getBytes());
//需要的jdk版本myeclipse2013中自带的com.sun.java.jdk.win32.x86_64_1.6.0.u43
//jdk1.7.0_25没有相关的包
BASE64Encoder encoder = new BASE64Encoder();
// 返回加密后的数据
return encoder.encode(result);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "" ;
};
}
|