loginserver user module

master
wangyuan 2019-08-19 10:06:30 +08:00
parent 4198a3f001
commit 4a73846f90
15 changed files with 502 additions and 19 deletions

View File

@ -0,0 +1,59 @@
package com.ljsd.controller;
import com.google.gson.Gson;
import com.ljsd.pojo.ResMsg;
import com.ljsd.util.BaseGlobal;
import com.ljsd.util.MD5Util;
import com.ljsd.util.StringUtils;
import com.mongodb.DBObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
public class GetNoticeController extends HttpServlet {
private static Gson gson = new Gson();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String timestamp = req.getParameter("timestamp");
String sign = req.getParameter("sign");
ResMsg resMsg = new ResMsg();
resMsg.setCode(1);
try (PrintWriter out = response.getWriter();){
if(StringUtils.checkIsEmpty(timestamp) || StringUtils.checkIsEmpty(sign)){
resMsg.setMsg("参数不能为空");
out.print(gson.toJson(resMsg));
return;
}
String mySign = MD5Util.encrypByMd5(timestamp + MD5Util.salt);
if(!mySign.equals(sign)){
resMsg.setMsg("签名错误");
out.print(gson.toJson(resMsg));
return;
}
DBObject notice = BaseGlobal.getInstance().mongoDBPool.findOne("notice_info", "1");
resMsg.setCode(0);
resMsg.setCode(0);
resMsg.setMsg("");
if(notice!=null){
Map<String,String> parms = new HashMap<>();
Object content = notice.get("content");
Object title = notice.get("title");
parms.put("title",title.toString());
parms.put("content",content.toString());
resMsg.setParms(parms);
}
out.print(gson.toJson(resMsg));
}catch (Exception e){
e.printStackTrace();
}
}
}

View File

@ -17,14 +17,17 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.*;
public class GetUserController extends HttpServlet {
private final static String _COLLECTION_NAME = "user_info";
private static final Logger LOGGER = LoggerFactory.getLogger(GetUserController.class);
public static int isTestLan=0;
public static void initLanState(){
Properties properties = BaseGlobal.getInstance().properties;
isTestLan = Integer.parseInt(properties.getProperty("isTestLan"));
}
public GetUserController() {
super();
@ -58,20 +61,27 @@ public class GetUserController extends HttpServlet {
response.sendError(400, "platform is empety");
return;
}
if(!"3".equals(platform)){
boolean result = loginVerfify(platform, openId, token);
if(!result){
response.sendError(400, "verify fail");
return;
}
}
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
DBObject dbObject = new BasicDBObject();
dbObject.put("openId", openId);
dbObject.put("serverId", serverId);
dbObject.put("platform", platform);
try {
if(isTestLan==1){
boolean result = loginVerfifyByTestLan(openId, token);
if(!result){
response.sendError(400, "verify fail");
return;
}
}else if(!"3".equals(platform)){
boolean result = loginVerfify(platform, openId, token);
if(!result){
response.sendError(400, "verify fail");
return;
}
}
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
DBObject dbObject = new BasicDBObject();
dbObject.put("openId", openId);
dbObject.put("serverId", serverId);
dbObject.put("platform", platform);
int uid = 0;
List<DBObject> userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject);
DBObject res = new BasicDBObject();
@ -132,6 +142,11 @@ public class GetUserController extends HttpServlet {
}
public static boolean loginVerfifyByTestLan(String openId,String token) throws Exception {
String tokenInRedis = BaseGlobal.getInstance().redisApp.get(RedisKey.LOGIN_TOKEN, openId, String.class, -1);
return token.equals(tokenInRedis);
}
private static boolean parseLoginResult(String orderResult){
try {

View File

@ -0,0 +1,31 @@
package com.ljsd.controller;
import com.ljsd.util.BaseGlobal;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class PublishNoticeController extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String content = request.getParameter("content");
String title = request.getParameter("title");
DBObject doc = new BasicDBObject();
doc.put("_id", "1");
doc.put("content", content);
doc.put("title", title);
BaseGlobal.getInstance().mongoDBPool.save("notice_info", doc);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("add suc");
out.flush();
out.close();
}
}

View File

@ -0,0 +1,15 @@
package com.ljsd.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class RoutePublishNoticeController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("updateNotice.jsp");
}
}

View File

@ -0,0 +1,78 @@
package com.ljsd.controller;
import com.google.gson.Gson;
import com.ljsd.pojo.ResMsg;
import com.ljsd.redis.RedisKey;
import com.ljsd.redis.RedisUtil;
import com.ljsd.util.BaseGlobal;
import com.ljsd.util.MD5Util;
import com.ljsd.util.StringUtils;
import com.mongodb.DBObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class UserLoginController extends HttpServlet {
private static Gson gson = new Gson();
private static final String _COLLECTION_NAME = "user_register_info";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String name = request.getParameter("userName");
String password = request.getParameter("password");
String sign = request.getParameter("sign");
String returnMsg = "success";
ResMsg resMsg = new ResMsg();
resMsg.setCode(1);
try (PrintWriter out = response.getWriter();){
if(StringUtils.checkIsEmpty(name) || StringUtils.checkIsEmpty(password) || StringUtils.checkIsEmpty(sign)){
resMsg.setMsg("参数不能为空");
out.print(gson.toJson(resMsg));
return;
}
String mySign = MD5Util.encrypByMd5(name + password + MD5Util.salt);
if(!mySign.equals(sign)){
resMsg.setMsg("签名错误");
out.print(gson.toJson(resMsg));
return;
}
DBObject one = BaseGlobal.getInstance().mongoDBPool.findOne(_COLLECTION_NAME, name);
if(one ==null){
resMsg.setMsg("该账号不存在");
resMsg.setMsg(returnMsg);
out.print(gson.toJson(resMsg));
return;
}
Object passwordInDb = one.get("password");
if(!password.equals(passwordInDb)){
resMsg.setMsg("密码错误,请重试");
out.print(gson.toJson(resMsg));
return;
}
Map<String,String> parms = new HashMap<>();
parms.put("openId",one.get("openId").toString());
int token = new Random().nextInt(1024) +10000;
parms.put("token",Integer.toString(token));
BaseGlobal.getInstance().redisApp.set(RedisKey.LOGIN_TOKEN,name,token,-1, false);
resMsg.setCode(0);
resMsg.setMsg(returnMsg);
resMsg.setParms(parms);
out.print(gson.toJson(resMsg));
}catch (Exception e){
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,95 @@
package com.ljsd.controller;
import com.google.gson.Gson;
import com.ljsd.pojo.ResMsg;
import com.ljsd.util.BaseGlobal;
import com.ljsd.util.MD5Util;
import com.ljsd.util.StringUtils;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
public class UserRegisterController extends HttpServlet {
private static final String _COLLECTION_NAME = "user_register_info";
private static Gson gson = new Gson();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String name = request.getParameter("userName");
String password = request.getParameter("password");
String repeat = request.getParameter("repeat");
String sign = request.getParameter("sign");
String returnMsg = "success";
ResMsg resMsg = new ResMsg();
resMsg.setCode(1);
try ( PrintWriter out = response.getWriter();){
if(StringUtils.checkIsEmpty(name) || StringUtils.checkIsEmpty(password) || StringUtils.checkIsEmpty(repeat) || StringUtils.checkIsEmpty(sign) ){
returnMsg = "输入不可以为空";
resMsg.setMsg(returnMsg);
out.print(gson.toJson(resMsg));
return;
}
if(!password.equals(repeat)){
returnMsg = "两次密码输入不一致";
resMsg.setMsg(returnMsg);
out.print(gson.toJson(resMsg));
return;
}
if(!StringUtils.checkIsNumberOrChar(name)){
resMsg.setMsg("用户名只能是数字或英文符号");
out.print(gson.toJson(resMsg));
return;
}
if(name.length()<2 || name.length()>6){
resMsg.setMsg("用户名长度不符合");
out.print(gson.toJson(resMsg));
return;
}
String mySign = MD5Util.encrypByMd5(name + password + MD5Util.salt);
if(!mySign.equals(sign)){
resMsg.setMsg("签名错误");
out.print(gson.toJson(resMsg));
return;
}
DBObject one = BaseGlobal.getInstance().mongoDBPool.findOne(_COLLECTION_NAME, name);
if(one!=null){
resMsg.setMsg("该账号已被注册");
out.print(gson.toJson(resMsg));
return;
}
DBObject doc = new BasicDBObject();
doc.put("_id", name);
doc.put("password", password);
int random = new Random(1024).nextInt();
String openId = MD5Util.encrypByMd5(mySign + random);
doc.put("openId", openId);
BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, doc);
resMsg.setCode(0);
resMsg.setMsg(returnMsg);
out.print(gson.toJson(resMsg));
}catch (Exception e){
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,36 @@
package com.ljsd.pojo;
import java.util.Map;
public class ResMsg {
private int code;
private String msg;
private Map<String,String> parms;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Map<String, String> getParms() {
return parms;
}
public void setParms(Map<String, String> parms) {
this.parms = parms;
}
}

View File

@ -2,6 +2,7 @@ package com.ljsd.redis;
public interface RedisKey {
String TOKEN = "JL_TOKEN";
String LOGIN_TOKEN = "JL_LOGIN_TOKEN";
/**
*

View File

@ -1,5 +1,6 @@
package com.ljsd.util;
import com.ljsd.controller.GetUserController;
import com.ljsd.redis.RedisApp;
import java.util.Properties;
@ -28,5 +29,6 @@ public class BaseGlobal {
public void init() {
mongoDBPool = new MyMongoDBPool();
redisApp = new RedisApp();
GetUserController.initLanState();
}
}

View File

@ -0,0 +1,37 @@
package com.ljsd.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
public static final String salt = "d13b3e8ef74bf72d8aafce3a1c8672a0";
public static String encrypByMd5(String context) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(context.getBytes());//update处理
byte [] encryContext = md.digest();//调用该方法完成计算
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < encryContext.length; offset++) {//做相应的转化(十六进制)
i = encryContext[offset];
if (i < 0) i += 256;
if (i < 16) buf.append("0");
buf.append(Integer.toHexString(i));
}
return buf.toString().toLowerCase();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
public static void main(String[] args) {
System.out.println(MD5Util.encrypByMd5("pc2222" + salt));
}
}

View File

@ -0,0 +1,17 @@
package com.ljsd.util;
public class StringUtils {
public static boolean checkIsEmpty(String source){
if(source == null || "".equals(source))
return true;
return false;
}
public static boolean checkIsNumberOrChar(String source){
return source.matches("[a-zA-Z0-9]+");
}
}

View File

@ -25,4 +25,6 @@ redis_maxTotal = 10
redis_minIdle = 3
redis_maxWaitMillis = 20
redis_maxIdle = 5
redis_testOnBorrow = false
redis_testOnBorrow = false
isTestLan = 1

View File

@ -20,6 +20,36 @@
<url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>updateNotice</servlet-name>
<servlet-class>com.ljsd.controller.RoutePublishNoticeController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>updateNotice</servlet-name>
<url-pattern>/updateNotice</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>publishNotice</servlet-name>
<servlet-class>com.ljsd.controller.PublishNoticeController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>publishNotice</servlet-name>
<url-pattern>/publishNotice</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getNotice</servlet-name>
<servlet-class>com.ljsd.controller.GetNoticeController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getNotice</servlet-name>
<url-pattern>/getNotice</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getServerList</servlet-name>
<servlet-class>com.ljsd.controller.GetServerListController</servlet-class>
@ -50,6 +80,27 @@
<url-pattern>/getUserInfo</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>registerUser</servlet-name>
<servlet-class>com.ljsd.controller.UserRegisterController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>registerUser</servlet-name>
<url-pattern>/registerUser</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>userLogin</servlet-name>
<servlet-class>com.ljsd.controller.UserLoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>userLogin</servlet-name>
<url-pattern>/userLogin</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>serverList</servlet-name>
<servlet-class>com.ljsd.controller.ServerListController</servlet-class>

View File

@ -39,7 +39,7 @@
<div id="login">
<h1 style="color: #000000" onresize="50">《戒灵》添加服务器</h1>
<div id="form">
<form action="regist" method="post">
<form action="regist" method="post" accept-charset="UTF-8">
<p>name: <input type="text" name="name" placeholder="请输入游戏服务器名字" required /></p>
<p>ip: <input type="text" name="ip" pattern="(\d+)\.(\d+)\.(\d+)\.(\d+)" placeholder="请输入服务器IP地址" required /></p>
<p>port: <input type="text" value="9000" name="port" pattern="[0-9]{0,6}" placeholder="请输入端口号" required /></p>

View File

@ -0,0 +1,44 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<STYLE type="text/css">
#publish {
width: 400px;
height: 280px;
position: absolute;
left: 50%;
top: 20%;
margin-left: -200px;
margin-top: -140px;
border: 1px;
/* background-color: #befff1;*/
align: center;
}
#form {
width: 300px;
height: 160px;
position: relative;
left: 50%;
top: 50%;
margin-left: -150px;
margin-top: -80px;
}
</STYLE>
<head>
<title>《戒灵》发布公告</title>
</head>
<body>
<div id="publish">
<h1 style="color: #000000" onresize="50">《戒灵》发布公告</h1>
<div id="form">
<form action="publishNotice" method="post" accept-charset="UTF-8">
<p>name: <input type="text" name="title" placeholder="游戏公告标题" required /></p>
<p>name: <input type="text" name="content" placeholder="游戏公告内容" required /></p>
<input type="submit" value="Submit"/>
</form>
</div>
</div>
</body>
</html>