This commit is contained in:
@@ -183,21 +183,10 @@ public abstract class HttpBaseServlet extends HttpServlet {
|
|||||||
|
|
||||||
private Map.Entry<String, Entry>[] mappings;
|
private Map.Entry<String, Entry>[] mappings;
|
||||||
|
|
||||||
public boolean preExecute(HttpRequest request, HttpResponse response) throws IOException {
|
private final HttpServlet authSuccessServlet = new HttpServlet() {
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void execute(HttpRequest request, HttpResponse response) throws IOException {
|
public void execute(HttpRequest request, HttpResponse response) throws IOException {
|
||||||
if (!preExecute(request, response)) return;
|
Entry entry = (Entry) request.attachment;
|
||||||
for (Map.Entry<String, Entry> en : mappings) {
|
|
||||||
if (request.getRequestURI().startsWith(en.getKey())) {
|
|
||||||
Entry entry = en.getValue();
|
|
||||||
if (!entry.checkMethod(request.getMethod())) {
|
|
||||||
response.finishJson(new RetResult(RET_METHOD_ERROR, "Method(" + request.getMethod() + ") Error"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (entry.ignore || authenticate(entry.moduleid, entry.actionid, request, response)) {
|
|
||||||
if (entry.cacheseconds > 0) {//有缓存设置
|
if (entry.cacheseconds > 0) {//有缓存设置
|
||||||
CacheEntry ce = entry.cache.get(request.getRequestURI());
|
CacheEntry ce = entry.cache.get(request.getRequestURI());
|
||||||
if (ce != null && ce.time + entry.cacheseconds > System.currentTimeMillis()) { //缓存有效
|
if (ce != null && ce.time + entry.cacheseconds > System.currentTimeMillis()) { //缓存有效
|
||||||
@@ -210,11 +199,54 @@ public abstract class HttpBaseServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
entry.servlet.execute(request, response);
|
entry.servlet.execute(request, response);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private final HttpServlet preSuccessServlet = new HttpServlet() {
|
||||||
|
@Override
|
||||||
|
public void execute(HttpRequest request, HttpResponse response) throws IOException {
|
||||||
|
for (Map.Entry<String, Entry> en : mappings) {
|
||||||
|
if (request.getRequestURI().startsWith(en.getKey())) {
|
||||||
|
Entry entry = en.getValue();
|
||||||
|
if (!entry.checkMethod(request.getMethod())) {
|
||||||
|
response.finishJson(new RetResult(RET_METHOD_ERROR, "Method(" + request.getMethod() + ") Error"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
request.attachment = entry;
|
||||||
|
if (entry.ignore) {
|
||||||
|
authSuccessServlet.execute(request, response);
|
||||||
|
} else {
|
||||||
|
authenticate(entry.moduleid, entry.actionid, request, response, authSuccessServlet);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new IOException(this.getClass().getName() + " not found method for URI(" + request.getRequestURI() + ")");
|
throw new IOException(this.getClass().getName() + " not found method for URI(" + request.getRequestURI() + ")");
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用 public void preExecute(HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException 方法代替
|
||||||
|
*
|
||||||
|
* @param request HttpRequest
|
||||||
|
* @param response HttpResponse
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws IOException
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public boolean preExecute(HttpRequest request, HttpResponse response) throws IOException {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void preExecute(HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException {
|
||||||
|
if (preExecute(request, response)) next.execute(request, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final void execute(HttpRequest request, HttpResponse response) throws IOException {
|
||||||
|
preExecute(request, response, preSuccessServlet);
|
||||||
|
}
|
||||||
|
|
||||||
public final void preInit(HttpContext context, AnyValue config) {
|
public final void preInit(HttpContext context, AnyValue config) {
|
||||||
String path = _prefix == null ? "" : _prefix;
|
String path = _prefix == null ? "" : _prefix;
|
||||||
@@ -233,7 +265,26 @@ public abstract class HttpBaseServlet extends HttpServlet {
|
|||||||
public final void postDestroy(HttpContext context, AnyValue config) {
|
public final void postDestroy(HttpContext context, AnyValue config) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract boolean authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response) throws IOException;
|
/**
|
||||||
|
* 使用 public void authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException 代替
|
||||||
|
*
|
||||||
|
* @param moduleid moduleid
|
||||||
|
* @param actionid actionid
|
||||||
|
* @param request HttpRequest
|
||||||
|
* @param response HttpResponse
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @throws IOException
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public boolean authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response) throws IOException {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException {
|
||||||
|
if (authenticate(moduleid, actionid, request, response)) next.execute(request, response);
|
||||||
|
}
|
||||||
|
|
||||||
protected void setHeader(HttpRequest request, String name, Serializable value) {
|
protected void setHeader(HttpRequest request, String name, Serializable value) {
|
||||||
request.header.setValue(name, String.valueOf(value));
|
request.header.setValue(name, String.valueOf(value));
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
|
|
||||||
private final String remoteAddrHeader;
|
private final String remoteAddrHeader;
|
||||||
|
|
||||||
|
Object attachment; //供 HttpBaseServlet传递Entry使用
|
||||||
|
|
||||||
public HttpRequest(HttpContext context, String remoteAddrHeader) {
|
public HttpRequest(HttpContext context, String remoteAddrHeader) {
|
||||||
super(context);
|
super(context);
|
||||||
this.remoteAddrHeader = remoteAddrHeader;
|
this.remoteAddrHeader = remoteAddrHeader;
|
||||||
@@ -336,6 +338,8 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
this.boundary = false;
|
this.boundary = false;
|
||||||
this.bodyparsed = false;
|
this.bodyparsed = false;
|
||||||
|
|
||||||
|
this.attachment = null;
|
||||||
|
|
||||||
this.header.clear();
|
this.header.clear();
|
||||||
this.params.clear();
|
this.params.clear();
|
||||||
this.array.clear();
|
this.array.clear();
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import javax.annotation.Resource;
|
|||||||
import org.redkale.net.http.*;
|
import org.redkale.net.http.*;
|
||||||
import org.redkale.service.RetResult;
|
import org.redkale.service.RetResult;
|
||||||
|
|
||||||
|
|
||||||
public class SimpleRestServlet extends RestHttpServlet<UserInfo> {
|
public class SimpleRestServlet extends RestHttpServlet<UserInfo> {
|
||||||
|
|
||||||
protected static final RetResult RET_UNLOGIN = RetCodes.retResult(RetCodes.RET_USER_UNLOGIN);
|
protected static final RetResult RET_UNLOGIN = RetCodes.retResult(RetCodes.RET_USER_UNLOGIN);
|
||||||
@@ -26,16 +25,16 @@ public class SimpleRestServlet extends RestHttpServlet<UserInfo> {
|
|||||||
|
|
||||||
//普通鉴权
|
//普通鉴权
|
||||||
@Override
|
@Override
|
||||||
public boolean authenticate(int module, int actionid, HttpRequest request, HttpResponse response) throws IOException {
|
public void authenticate(int module, int actionid, HttpRequest request, HttpResponse response, HttpServlet next) throws IOException {
|
||||||
UserInfo info = currentUser(request);
|
UserInfo info = currentUser(request);
|
||||||
if (info == null) {
|
if (info == null) {
|
||||||
response.finishJson(RET_UNLOGIN);
|
response.finishJson(RET_UNLOGIN);
|
||||||
return false;
|
return;
|
||||||
} else if (!info.checkAuth(module, actionid)) {
|
} else if (!info.checkAuth(module, actionid)) {
|
||||||
response.finishJson(RET_AUTHILLEGAL);
|
response.finishJson(RET_AUTHILLEGAL);
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
return true;
|
next.execute(request, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user