package com.huahuan.weibo;
import com.huahuan.servletutil.ServletUtil;
import com.huahuan.table.Yhb;
import com.huahuan.tools.MD5;
import com.huahuan.tools.UserUtil;
import com.qq.connect.QQConnectException;
import com.qq.connect.api.OpenID;
import com.qq.connect.api.qzone.UserInfo;
import com.qq.connect.javabeans.AccessToken;
import com.qq.connect.javabeans.qzone.UserInfoBean;
import com.qq.connect.oauth.Oauth;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.jplus.hyb.database.Hyberbin;
/**
*
* @author Evance
*/
@WebServlet(name = "QqLogin", urlPatterns = {"/QqLogin.jsp", "/QqLoginHSDDZ/*"})
public class QqLogin extends HttpServlet {
public final static int OTHER = 0;//其它
public final static int LOGIN = 1;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
execute(ServletUtil.setModel(request.getParameter("mode"), this), request, response);
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
public void login(HttpServletRequest request, HttpServletResponse response) {
try {
String url = new Oauth().getAuthorizeURL(request);
// String user = hsojLogin(request, request.getSession());
// if (user != null) {
// url = url.replace("QqLogin.jsp", "/QqLoginHSDDZ/" + user);
// }
// url = url.replace("QqLogin.jsp", "/QqLoginHSDDZ/");
response.sendRedirect(url);
} catch (Exception e) {
}
}
public void qq(HttpServletRequest request, HttpServletResponse response) {
System.out.println("QQ跳转回来了");
String notice;
try {
AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
String accessToken, openID;
if (accessTokenObj.getAccessToken().equals("")) {
notice = "没有获取到响应参数!";
} else {
accessToken = accessTokenObj.getAccessToken();
// 利用获取到的accessToken 去获取当前用的openid -------- start
OpenID openIDObj = new OpenID(accessToken);
openID = openIDObj.getUserOpenID();
// 利用获取到的accessToken 去获取当前用户的openid --------- end
System.out.println("openid:" + openID.toString());
UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
Yhb qqYh = UserUtil.getQqYh(openID);
if (qqYh.getId() == null) {
boolean registerBySina = UserUtil.registerByQq(userInfoBean.getNickname(), openID);
if (registerBySina) {
notice = "欢迎使用QQ登录HSDDZ!";
qqYh = UserUtil.getQqYh(openID);
login(request, request.getSession(), qqYh);
// HsojLogger.log(request, "用QQ注册并登录");
} else {
notice = "用您QQ在HSDDZ上注册账号注册失败!";
// HsojLogger.log(request, "用QQ号注册失败");
}
} else {
login(request, request.getSession(), qqYh);
}
System.out.println("QQ登录成功");
}
} catch (QQConnectException e) {
notice = "没有成功登录QQ!";
// HsojLogger.log(request, "用QQ登录失败");
}
System.out.println("跳转到首页成功");
try {
response.sendRedirect(request.getContextPath() + "/tz.jsp");
} catch (IOException ex) {
Logger.getLogger(QqLogin.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void execute(int event, HttpServletRequest request, HttpServletResponse response) {
/**
* 下面是相关模式下所做的动作*
*/
switch (event) {
case OTHER:
qq(request, response);
break;
case LOGIN:
login(request, response);
break;
}
}
//以下方法为第三方登录通用的方法
public void login(HttpServletRequest request, HttpSession session, Yhb yhb) {
session.setAttribute("yhb", yhb);
Hyberbin hyberbin = new Hyberbin(yhb);
//修改最后登录时间
SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String composetime = ss.format(new java.util.Date());
Timestamp sj = Timestamp.valueOf(composetime);
yhb.setZhdlsj(sj);
hyberbin.updateByKey("id");
//关于权限的部分
// if (PowerManager.getPower(request, PowerManager.HTGL)) {
// session.setAttribute("power", PowerManager.HTGL);
// }
// if (PowerManager.getPower(request, PowerManager.CKDM)) {
// session.setAttribute("ckdm", PowerManager.CKDM);
// }
session.setAttribute("weibo", yhb);
// String notice = null;
/**
* *******绑定功能暂时取消**********
*/
// Yhb logined = isHsojLogin(request);
// if (logined != null) {
//微博(QQ或者新浪)绑定
// boolean qqToYhb = UserUtil.weiboToyhb(logined, yhb);
// notice = "登录并绑定" + (qqToYhb ? "成功!" : "失败!");
// HsojLogger.log(request, "登录并绑定微博");
// } else {
// HsojLogger.log(request, "用微博账号登录");
// }
/**
* *******跳转取消*******
*/
// try {
// setNotice(request, notice);
// response.sendRedirect(request.getContextPath() + "/tz.jsp");
// } catch (IOException ex) {
// Logger.getLogger(QqLogin.class.getName()).log(Level.SEVERE, null, ex);
// }
}
public String hsojLogin(HttpServletRequest request, HttpSession session) {
//if (GetAdm.getCode(request, "code")) {
Yhb test = (Yhb) session.getAttribute("yhb");
if (test == null || test.getId() == null) {
return null;
} else {
Yhb yhb = new Yhb();
String yhm = request.getParameter("username");
String pass = request.getParameter("password");
Hyberbin hyberbin = new Hyberbin(yhb);
pass = MD5.md5(pass);//这里pass是null
hyberbin.addParmeter(yhm).addParmeter(yhm).addParmeter(yhm).addParmeter(pass);
hyberbin.showOne("select * from yhb where (yhm=? or yx=? ) and mm=?");
if (yhb.getId() != null) {
return yhb.getId() + "_" + yhb.getMm();
}
}
return null;
}
private Yhb isHsojLogin(HttpServletRequest request) {
String l = null, p = null;
String url = request.getRequestURL().toString();
if (url != null && url.contains("huahuan/")) {
url = url.substring(url.lastIndexOf("huahuan/") + "huahuan/".length());
String[] split = url.split("_");
l = split[0];
p = split[1];
}
if (l != null && p != null) {
Yhb yhb = new Yhb();
String yhid_str = l;
Integer yhid_int = 0;
try {
yhid_int = Integer.parseInt(yhid_str);
} catch (NumberFormatException numberFormatException) {
}
String pass = p;
if (yhid_int == null || yhid_int == 0 || pass == null || pass.trim().equals("")) {
return null;
} else {
yhb.setId(yhid_int);
Hyberbin hyberbin = new Hyberbin(yhb);
hyberbin.addParmeter(yhid_int).addParmeter(pass);
hyberbin.showOne("select * from yhb where id=? and mm=?");
if (yhb.getYhm() != null) {
return yhb;
}
}
}
return null;
}
}