重要更新:
1、修改servlet层中BaseServlet中共享request的重大bug 2、将servlet中页面统一使用HttpScope进行渲染
This commit is contained in:
@@ -1,18 +1,12 @@
|
||||
package com.lxyer.bbs.base;
|
||||
|
||||
import com.jfinal.kit.Kv;
|
||||
import com.jfinal.template.Engine;
|
||||
import com.jfinal.template.Template;
|
||||
import com.lxyer.bbs.base.kit.EJ;
|
||||
import com.lxyer.bbs.base.kit.RetCodes;
|
||||
import com.lxyer.bbs.base.user.UserInfo;
|
||||
import com.lxyer.bbs.base.user.UserService;
|
||||
import com.lxyer.bbs.comment.CommentService;
|
||||
import com.lxyer.bbs.content.ContentService;
|
||||
import org.redkale.net.http.HttpContext;
|
||||
import org.redkale.net.http.HttpRequest;
|
||||
import org.redkale.net.http.HttpResponse;
|
||||
import org.redkale.net.http.HttpServlet;
|
||||
import org.redkale.net.http.*;
|
||||
import org.redkale.source.FilterExpress;
|
||||
import org.redkale.source.FilterNode;
|
||||
import org.redkale.util.AnyValue;
|
||||
@@ -21,6 +15,7 @@ import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import static com.lxyer.bbs.base.kit.RetCodes.RET_USER_UNLOGIN;
|
||||
|
||||
@@ -28,26 +23,15 @@ import static com.lxyer.bbs.base.kit.RetCodes.RET_USER_UNLOGIN;
|
||||
* Created by Lxy at 2017/10/3 13:39.
|
||||
*/
|
||||
public class BaseServlet extends HttpServlet {
|
||||
private HttpRequest request;
|
||||
private HttpResponse response;
|
||||
private static final Kv _kv = Kv.create();
|
||||
private static Engine engine;
|
||||
protected String sessionid;
|
||||
protected int currentid;//登录人id
|
||||
|
||||
protected static final boolean winos = System.getProperty("os.name").contains("Window");
|
||||
|
||||
@Resource(name = "SERVER_ROOT")
|
||||
protected File webroot;
|
||||
|
||||
/*@Resource
|
||||
protected EnjoyService enjoyService;*/
|
||||
@Resource
|
||||
protected UserService userService;
|
||||
|
||||
/*@Resource(name = "redis")
|
||||
protected RedisCacheSource<String> cache;*/
|
||||
|
||||
@Resource
|
||||
protected ContentService contentService;
|
||||
|
||||
@@ -57,28 +41,20 @@ public class BaseServlet extends HttpServlet {
|
||||
@Resource
|
||||
protected TaskQueue<Map> logQueue;
|
||||
|
||||
|
||||
@Override
|
||||
public void init(HttpContext context, AnyValue config) {
|
||||
if (engine == null){
|
||||
engine = new Engine();
|
||||
engine.setBaseTemplatePath(webroot.getPath());
|
||||
engine.addSharedObject("EJ", new EJ());
|
||||
engine.addSharedFunction("/_t/layout.html");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void preExecute(HttpRequest request, HttpResponse response) throws IOException {
|
||||
sessionid = request.getSessionid(false);
|
||||
String sessionid = request.getSessionid(true);
|
||||
int currentid = 0;
|
||||
if (sessionid != null) {
|
||||
request.setCurrentUser(userService.current(sessionid));
|
||||
currentid = userService.currentUserId(sessionid);
|
||||
_kv.set("mine", request.currentUser());
|
||||
}
|
||||
|
||||
this.request = request;
|
||||
this.response = response;
|
||||
String uri = request.getRequestURI();
|
||||
if (uri.startsWith("/res")){
|
||||
File file = new File(webroot + uri);
|
||||
@@ -86,34 +62,30 @@ public class BaseServlet extends HttpServlet {
|
||||
return;
|
||||
}
|
||||
if (uri.endsWith(".html")){
|
||||
Kv kv = Kv.by("resSys", "resSys");
|
||||
finish(uri, kv);
|
||||
response.finish(HttpScope.refer(uri));
|
||||
return;
|
||||
}
|
||||
|
||||
Kv visLog = new Kv();//ip、time、userid、uri、para
|
||||
visLog.set("ip", request.getRemoteAddr());
|
||||
request.getHost();
|
||||
visLog.set("time", System.currentTimeMillis());
|
||||
visLog.set("userid", currentid);
|
||||
visLog.set("uri", request.getRequestURI());
|
||||
//异步记录访问日志
|
||||
final int userid = currentid;
|
||||
CompletableFuture.runAsync(()->{
|
||||
Kv visLog = new Kv();//ip、time、userid、uri、para
|
||||
visLog.set("ip", request.getRemoteAddr());
|
||||
visLog.set("time", System.currentTimeMillis());
|
||||
visLog.set("userid", userid);
|
||||
visLog.set("uri", request.getRequestURI());
|
||||
|
||||
Kv para = Kv.create();
|
||||
for (String key : request.getParameterNames()){
|
||||
para.set(key, request.getParameter(key));
|
||||
}
|
||||
visLog.set("para", para);
|
||||
try {
|
||||
logQueue.put(visLog);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
/*if ("/".equals(uri)){
|
||||
finish("/front/index.html", Kv.by("",""));
|
||||
return;
|
||||
}*/
|
||||
Kv para = Kv.create();
|
||||
for (String key : request.getParameterNames()){
|
||||
para.set(key, request.getParameter(key));
|
||||
}
|
||||
visLog.set("para", para);
|
||||
try {
|
||||
logQueue.put(visLog);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
|
||||
response.nextEvent();
|
||||
}
|
||||
@@ -124,49 +96,26 @@ public class BaseServlet extends HttpServlet {
|
||||
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
|
||||
response.finish(RetCodes.retResult(RET_USER_UNLOGIN, "未登录,登录后重试").toString());
|
||||
}else {
|
||||
finish("/user/login.html");
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
response.nextEvent();
|
||||
}
|
||||
|
||||
public void finish(String view, Kv kv) {
|
||||
if (request.currentUser() != null){
|
||||
kv.set("mine", request.currentUser());
|
||||
}
|
||||
|
||||
Template template = engine.getTemplate(view);
|
||||
String str = template.renderToString(kv);
|
||||
response.setContentType("text/html; charset=UTF-8");
|
||||
response.finish(str);
|
||||
}
|
||||
|
||||
public void finish(String view){
|
||||
finish(view, _kv);
|
||||
}
|
||||
|
||||
public int getLimit(){
|
||||
public int getLimit(HttpRequest request){
|
||||
return request.getIntParameter("limit", 1);
|
||||
}
|
||||
public int getOffset(){
|
||||
public int getOffset(HttpRequest request){
|
||||
return request.getIntParameter("offset", 10);
|
||||
}
|
||||
|
||||
/*
|
||||
测试用例
|
||||
System.out.println("sb="+getPara());
|
||||
System.out.println("sb(0)="+getPara(0));
|
||||
System.out.println("sb(1)="+getPara(1));
|
||||
System.out.println("sb(-1)="+getPara(-1));
|
||||
System.out.println("sb(-2)="+getPara(-2));
|
||||
* */
|
||||
public String getPara(){
|
||||
public String getPara(HttpRequest request){
|
||||
String requestURI = request.getRequestURI();
|
||||
String subStr = requestURI.substring(requestURI.lastIndexOf("/") + 1);
|
||||
return subStr.contains("-") ? subStr.substring(0, subStr.indexOf("-")) : subStr;
|
||||
}
|
||||
public String getPara(int index){
|
||||
public String getPara(HttpRequest request,int index){
|
||||
String requestURI = request.getRequestURI();
|
||||
String subStr = requestURI.substring(requestURI.lastIndexOf("/") + 1);
|
||||
|
||||
@@ -177,17 +126,17 @@ public class BaseServlet extends HttpServlet {
|
||||
return paraArr.length < index+1 ? null : paraArr[index];
|
||||
}
|
||||
}
|
||||
public <T> T getPara(int index, T defaultValue){
|
||||
T para = (T)getPara(index);
|
||||
public <T> T getPara(HttpRequest request, int index, T defaultValue){
|
||||
T para = (T)getPara(request,index);
|
||||
return para == null || "".equals(para) ? defaultValue : para;
|
||||
}
|
||||
public int getParaToInt(int index, int defaultValue){
|
||||
String para = getPara(index);
|
||||
public int getParaToInt(HttpRequest request,int index, int defaultValue){
|
||||
String para = getPara(request,index);
|
||||
return para == null || "".equals(para) ? defaultValue : Integer.parseInt(para);
|
||||
}
|
||||
public int getParaToInt(int index){
|
||||
public int getParaToInt(HttpRequest request,int index){
|
||||
int n = 0;
|
||||
String para = getPara(index);
|
||||
String para = getPara(request,index);
|
||||
if (para == null || "".equals(para)) n = 0;
|
||||
try {
|
||||
n = Integer.parseInt(para);
|
||||
@@ -198,11 +147,11 @@ public class BaseServlet extends HttpServlet {
|
||||
}
|
||||
|
||||
//设置私密帖子过滤
|
||||
protected FilterNode setPrivate(FilterNode node){
|
||||
protected FilterNode setPrivate(HttpRequest request,FilterNode node){
|
||||
UserInfo userInfo = request.currentUser();
|
||||
if (userInfo == null){
|
||||
node.and("status", FilterExpress.NOTEQUAL, 30);
|
||||
}else if (!userService.isAdmin(currentid)){
|
||||
}else if (!userService.isAdmin(userInfo.getUserid())){
|
||||
//select * from content c where c.status != -1 and (c.status!=30 or (c.status=30 and c.userid=100001))
|
||||
node.and(FilterNode.create("status", FilterExpress.NOTEQUAL, 30).or(FilterNode.create("status", 30).and("userid", userInfo.getUserid())));
|
||||
}
|
||||
|
Reference in New Issue
Block a user