自动登录

package com.zuwoba.presentation.action.account;

import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

import com.opensymphony.xwork2.ActionContext;
import com.zuwoba.model.User;
import com.zuwoba.model.UserSession;
import com.zuwoba.presentation.action.base.BaseAction;
import com.zuwoba.util.EmailLoginAddress;
import com.zuwoba.util.MD5_Encoding;

/**
 * @project_name zuwoba
 * @file_name LoginAction.java
 * @author tianhandigeng
 * @version Oct 25, 2010 2:53:04 PM
 * @declaration
 */
public class LoginAction extends BaseAction implements ServletRequestAware,ServletResponseAware{
	private String email_username;
	private String password;
	private String captcha;
	private String autologin;

	private HttpServletRequest request;
	private HttpServletResponse response;
	
	
	// 提示窗口
	private String hint;
	private String tip;

	public String getTip() {
		return tip;
	}

	public void setTip(String tip) {
		this.tip = tip;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getAutologin() {
		return autologin;
	}

	public void setAutologin(String autologin) {
		this.autologin = autologin;
	}

	public String getEmail_username() {
		return email_username;
	}

	public void setEmail_username(String email_username) {
		this.email_username = email_username;
	}

	public String getHint() {
		return hint;
	}

	public void setHint(String hint) {
		this.hint = hint;
	}

	public String getCaptcha() {
		return captcha;
	}

	public void setCaptcha(String captcha) {
		this.captcha = captcha;
	}

	public void setServletRequest(HttpServletRequest servletRequest) {
        this.request=servletRequest;		
	}

	public void setServletResponse(HttpServletResponse servletResponse) {
		this.response=servletResponse;
	}
	
	@SuppressWarnings("unchecked")
	public String execute() {
////		HttpServletResponse response = (HttpServletResponse) ActionContext
////				.getContext().get(StrutsStatics.HTTP_RESPONSE);
////		HttpServletRequest request = (HttpServletRequest) ActionContext
////				.getContext().get(StrutsStatics.HTTP_REQUEST);
////		HttpSession session = request.getSession();
//		HttpServletResponse response=(HttpServletResponse)ServletActionContext.getResponse();
//		HttpServletRequest request=(HttpServletRequest)ServletActionContext.getRequest();
		HttpSession session=request.getSession();
		
		
		//获得域名
//		String host=request.getServerName();
		String host="ceshi";

		email_username = this.getEmail_username().trim();
		password = this.getPassword().trim();
		captcha = this.getCaptcha().trim().toLowerCase();
		autologin = this.getAutologin();

		// 密码加密
		MD5_Encoding md5 = new MD5_Encoding();
		password = md5.getMD5ofStr(password);

		if (!captcha.equals(session.getAttribute("idcode"))) {
			this.setTip("验证码错误");
			this.setHint("failed");
			return INPUT;
		} else {
			// Email登录
			User user1 = userService.findUserByEmailPassword(email_username,
					password);

			if (user1 != null) {
				if ("N".equals(user1.getEnable())) {// 邮件登陆但没有激活
					String emailAddress = EmailLoginAddress
							.getEmialLoginAddress(email_username);

					session.setAttribute("email", email_username);
					session.setAttribute("secret", user1.getSecret());
					session.setAttribute("tempname", user1.getUsername());
					session.setAttribute("emailAddress", emailAddress);

					return "unverified";
				} else {
					// 处理自动登录
					if (autologin != null) {
						// 创建两个cookie对象
						// 一个cookie记录用户名,另一个记录唯一的验证码
						// 并将此验证码写入数据库,以备用户返回时查询(防止伪造cookie)
						Cookie cookie1 = new Cookie("SESSION_LOGIN_USERNAME", user1
								 .getUsername());
						cookie1.setMaxAge(60 * 60 * 24 * 14);// 设置cookie有效期为2周
						cookie1.setPath("/");
						cookie1.setDomain(host);
						response.addCookie(cookie1);

						String sessionid = session.getId();
						Cookie cookie2 = new Cookie("SESSION_ID", sessionid);
						cookie2.setMaxAge(60 * 60 * 24 * 14);
						cookie2.setPath("/");
						cookie2.setDomain(host);
						response.addCookie(cookie2);

						// 在数据库中插入相应记录
						UserSession userSession = new UserSession();
						userSession.setUsername(user1.getUsername());
						userSession.setSessionid(sessionid);
						userService.addUserSession(userSession);
					}
					session.setAttribute("user", user1);
					return SUCCESS;
				}
			} else {
				// 用户名登陆
				User user2 = userService.findUserByUserNamePassword(
						email_username, password);
				if (user2 != null) {
					if ("N".equals(user2.getEnable())) {// 用户名登陆但没有激活
						String emailAddress = EmailLoginAddress
								.getEmialLoginAddress(email_username);

						session.setAttribute("email", email_username);
						session.setAttribute("secret", user2.getSecret());
						session.setAttribute("tempname", user2.getUsername());
						session.setAttribute("emailAddress", emailAddress);

						return "unverified";
					} else {

						// 处理自动登录
						if (autologin != null) {
							// 创建两个cookie对象
							// 一个cookie记录用户名,另一个记录唯一的验证码
							// 并将此验证码写入数据库,以备用户返回时查询(防止伪造cookie)
							Cookie cookie1 = new Cookie("SESSION_LOGIN_USERNAME", user2
									 .getUsername());
							cookie1.setMaxAge(60*60*24*14);// 设置cookie有效期为2周
							cookie1.setPath("/");
							cookie1.setDomain(host);
							response.addCookie(cookie1);

							String sessionid = session.getId();
							Cookie cookie2 = new Cookie("SESSION_ID", sessionid);
							cookie2.setMaxAge(60 * 60 * 24 * 14);
							cookie2.setPath("/");
							cookie2.setDomain(host);
							response.addCookie(cookie2);

							// 在数据库中插入相应记录
							UserSession userSession = new UserSession();
							userSession.setUsername(user2.getUsername());
							userSession.setSessionid(sessionid);
							userService.addUserSession(userSession);
						}
						session.setAttribute("user", user2);
						return SUCCESS;
					}
				} else {
					this.setHint("failed");
					this.setTip("不存在这样的Email或用户名或密码错误");
					return INPUT;
				}
			}
		}
	}
}

猜你喜欢

转载自xiongjiajia.iteye.com/blog/1445635