package com.xingshang.servlet;
import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;
import javax.servlet.ServletConfig; 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 com.xingshang.util.AuthUtil;
import net.sf.json.JSONObject;
/** * 回调地址 * @author Administrator * */ //@WebServlet("/callBack") public class CallBackSerclet extends HttpServlet {
/** * */ private static final long serialVersionUID = 1L;
private String dbUrl; private String driverClassName; private String userName; private String passWord;
private Connection conn =null; private PreparedStatement ps =null; private ResultSet rs = null;
//初始化数据库 @Override public void init(ServletConfig config) throws ServletException {
//加载驱动 try { this.dbUrl = config.getInitParameter("dbUrl"); this.driverClassName = config.getInitParameter("driverClassName"); this.userName = config.getInitParameter("userName"); this.passWord = config.getInitParameter("passWord"); Class.forName(driverClassName); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//第二步:通过code换取网页授权access_token
//从request里面获取code参数(当微信服务器访问回调地址的时候,会把code参数传递过来) String code = request.getParameter("code");
System.out.println("code:"+code);
//获取code后,请求以下链接获取access_token String url = ";
//通过网络请求方法来请求上面这个接口 JSONObject jsonObject = AuthUtil.doGetJson(url); System.out.println("==========================jsonObject"+jsonObject); //从返回的JSON数据中取出access_token和openid,拉取用户信息时用 String token = jsonObject.getString("access_token"); String openid = jsonObject.getString("openid"); // 第三步:刷新access_token(如果需要) // 第四步:拉取用户信息(需scope为 snsapi_userinfo) String infoUrl ="https://api.weixin.qq.com/sns/userinfo?access_token=" + token + "&openid="+ openid + "&lang=zh_CN"; //通过网络请求方法来请求上面这个接口 JSONObject userInfo = AuthUtil.doGetJson(infoUrl); System.out.println(userInfo); //第1种情况:使用微信用户信息直接登录,无需注册和绑定// request.setAttribute("info", userInfo); //直接跳转// request.getRequestDispatcher("/index1.jsp").forward(request, response); //第2种情况: 将微信与当前系统的账号进行绑定(需将第1种情况和@WebServlet("/callBack")注释掉) //第一步,根据当前openid查询数据库,看是否该账号已经进行绑定 try{ String nickname = getNickName(openid); if(!"".equals(nickname)){ //已绑定 request.setAttribute("nickname", nickname); request.getRequestDispatcher("/index2.jsp").forward(request, response); }else{ //未绑定 request.setAttribute("openid", openid); request.getRequestDispatcher("/login.jsp").forward(request, response); } } catch(SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //数据库的查询 publicString getNickName(String openid) throwsSQLException{ String nickName = ""; //创建数据库链接 conn = DriverManager.getConnection(dbUrl, userName, passWord); String sql = "select nickname from user where openid = ?"; ps = conn.prepareStatement(sql); ps.setString(1, openid); rs = ps.executeQuery(); while(rs.next()) { nickName = rs.getString("nickname"); } //关闭链接 rs.close(); ps.close(); conn.close(); returnnickName; } //数据库的修改(openid的綁定) publicintupdateUser(String account,String password,String openid) throwsSQLException{ //创建数据库链接 conn = DriverManager.getConnection(dbUrl, userName, passWord); String sql = "update user set openid = ? where account = ? and password = ?"; ps = conn.prepareStatement(sql); ps.setString(1, openid); ps.setString(2, account); ps.setString(3, password); inttemp = ps.executeUpdate(); //关闭链接 rs.close(); ps.close(); conn.close(); returntemp; } //post方法,用来接受登录请求 @Override protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { String account = request.getParameter("account"); String password = request.getParameter("password"); String openid = request.getParameter("openid"); try{ inttemp = updateUser(account, password, openid); if(temp > 0){ String nickname = getNickName(openid); request.setAttribute("nickname", nickname); request.getRequestDispatcher("/index2.jsp").forward(request, response); System.out.println("账号绑定成功"); }else{ System.out.println("账号绑定失败"); } } catch(SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
|