1.LoginAction.java(登陆的后台代码)

 

package org.fjh.action;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.fjh.entity.Admin;
import org.fjh.service.AdminService;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;

@Controller
public class AdminLoginAction extends ActionSupport {

//List<Admin> list=new ArrayList<Admin>();
@Resource
private AdminService adminservice;
private Admin admin;
private String checkcode;
private String isautologin;


public String getIsautologin() {
return isautologin;
}
public void setIsautologin(String isautologin) {
this.isautologin = isautologin;
}
public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
public String getCheckcode() {
return checkcode;
}
public void setCheckcode(String checkcode) {
this.checkcode = checkcode;
}

public String adminLogin() throws ServletException, IOException {
String msg="";
HttpServletRequest req=ServletActionContext.getRequest();
HttpServletResponse resp= ServletActionContext.getResponse();
admin=adminservice.checkLogin(admin);
//获取生成的验证码
String validate=(String) req.getSession().getAttribute("rand");

if(admin!=null&&validate.equals(checkcode)){
//将用户名和密码存入COOKIE,以便自动登录
req.getSession().setAttribute("admininfo", admin);
if(isautologin!=null&&isautologin.equals("on")){
Cookie cookie_uname=new Cookie("adminname",admin.getAdminName());
cookie_uname.setMaxAge(60*60*24*14);
resp.addCookie(cookie_uname);

Cookie cookie_upass=new Cookie("adminupass",admin.getPassword());
cookie_upass.setMaxAge(60*60*24*14);
resp.addCookie(cookie_upass);
}
msg=this.SUCCESS;
//req.getRequestDispatcher("MyJsp.jsp").forward(req, resp);
}else{
//清除浏览器中的Cookie
Cookie cookie_uname=new Cookie("adminname",null);
resp.addCookie(cookie_uname);
Cookie cookie_upass=new Cookie("adminupass",null);
resp.addCookie(cookie_upass);
req.getSession().setAttribute("msg", "登录失败,请检查后重新登录!");
//req.getRequestDispatcher("backLogin.jsp").forward(req, resp);
msg="loginng";
}

return msg;
}

public String autoLogin()throws ServletException, IOException{
Admin admin=new Admin();
String msg="";
HttpServletRequest req=ServletActionContext.getRequest();
HttpServletResponse resp= ServletActionContext.getResponse();
String uname=req.getParameter("adminname");
String upass=req.getParameter("password");
admin.setAdminName(uname);
admin.setPassword(upass);
admin=adminservice.checkLogin(admin);
if(admin!=null){
msg ="success";
}
return msg;
}

}

 

2.在相应的Login.jsp页面用JQuery后去Cookie中的内容

<script type="text/javascript">
/*function refreshCheckCode(){
var img=document.getElementById("a100");
img.src="<%=basePath %>checkcode.action?"+Math.random();
}*/
$(function(){
var cookie_uname =$.cookie('adminname');
var cookie_upass =$.cookie('adminupass');
//alert($.cookie("adminname"));
//判断cookie是否存在
if( cookie_uname != undefined && cookie_upass!=undefined && cookie_uname.length!=0 && cookie_upass.length!=0){
//将数据发送给登陆servlet(get)
var url = "<%=basePath%>autologin.action?adminname="+cookie_uname+"&password="+cookie_upass;
//alert(url);
//改变当前的url
location.href = url;
}
});

</script>

//(此时要引用JQuery插件)

<script type="text/javascript" src="js/jquery-1.11.3.js"></script>
<script type="text/javascript" src="js/cookie/jquery.cookies.1.4.1.js"></script>

 

3.此部分是登陆的Form表单

<div class="Main">
<div class="Login">
<h2 style="margin-bottom:5px; margin-top:5px;text-align:center ">管理员登陆</h2>
<ul class="Login_ul">
<form action="<%=basePath %>adminlogin.action" method="post">
<li><input type="hidden" /></li>
<li><label>账&nbsp;&nbsp;&nbsp;&nbsp;号:</label><input type="text" name="admin.adminName" class="txt"/></li>
<li><label> 密&nbsp;&nbsp;&nbsp;&nbsp;码:</label><input type="text" name="admin.password" class="txt" /></li>
<li><label>验证码:</label><input type="text" name="checkcode" class="txt" id="login-check-image" style="width:80px;"/>
<img id="a100" onclick="refreshCheckCode()" src="<%=basePath %>checkcode.action" title="换一张" alt="点击换一张"/></li>
<li><input type="checkbox" id="isautologin" name="isautologin"/>&nbsp;二周内自动登陆<a href="#" title="忘记密码" style="margin-left:70px;">忘记密码</a></li>
<li><input type="submit" value="登录" class="btn txt"/>
<input type="button" value="注册" class="btn txt"/></li>
</form>
</ul>
</div>
</div>

 

4.附件(刷新生产验证码)

package org.fjh.action;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class CheckCodeAction extends ActionSupport{

Color getRandColor(int fc, int bc) {
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}

@Override
public String execute() throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = ServletActionContext.getRequest();
// 设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

// 在内存中创建图象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);

// 获取图形上下文
Graphics g = image.getGraphics();

// 生成随机类
Random random = new Random();

// 设定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);

// 设定字体
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));

// 画边框
// g.setColor(new Color());
// g.drawRect(0,0,width-1,height-1);

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}

// 取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
// 将认证码显示到图象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}

// 将认证码存入SESSION
request.getSession().setAttribute("rand", sRand);

// 图象生效
g.dispose();

// 输出图象到页面

ImageIO.write(image, "JPEG", response.getOutputStream());
return null;
}
}