diff --git a/conf/application.xml b/conf/application.xml index f699172ac..f23000868 100644 --- a/conf/application.xml +++ b/conf/application.xml @@ -19,8 +19,8 @@ --> - - + + diff --git a/src/org/redkale/net/http/HttpUserType.java b/src/org/redkale/net/http/HttpUserType.java index 63a3351b8..b2d0477cc 100644 --- a/src/org/redkale/net/http/HttpUserType.java +++ b/src/org/redkale/net/http/HttpUserType.java @@ -11,7 +11,8 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * 配合 HttpServlet 使用。 - * 用于指定HttpRequest.currentUser的数据类型。 + * 用于指定HttpRequest.currentUser的数据类型。
+ * 注意: 数据类型是JavaBean,则必须要用javax.persistence.Id标记主键字段,用于确定用户ID * *

* 详情见: https://redkale.org @@ -25,4 +26,5 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; public @interface HttpUserType { Class value(); + } diff --git a/test/org/redkale/test/rest/SimpleRestServlet.java b/test/org/redkale/test/rest/SimpleRestServlet.java index ad783ddc2..29e742e35 100644 --- a/test/org/redkale/test/rest/SimpleRestServlet.java +++ b/test/org/redkale/test/rest/SimpleRestServlet.java @@ -6,7 +6,8 @@ import javax.annotation.Resource; import org.redkale.net.http.*; import org.redkale.service.RetResult; -public class SimpleRestServlet extends RestHttpServlet { +@HttpUserType(UserInfo.class) +public class SimpleRestServlet extends HttpServlet { protected static final RetResult RET_UNLOGIN = RetCodes.retResult(RetCodes.RET_USER_UNLOGIN); @@ -15,18 +16,15 @@ public class SimpleRestServlet extends RestHttpServlet { @Resource private UserService userService; - //获取当前用户信息 - @Override - protected UserInfo currentUser(HttpRequest req) throws IOException { - String sessionid = req.getSessionid(false); - if (sessionid == null || sessionid.isEmpty()) return null; - return userService.current(sessionid); - } - //普通鉴权 @Override public void authenticate(HttpRequest request, HttpResponse response) throws IOException { - UserInfo info = currentUser(request); + UserInfo info = request.currentUser(); + if (info == null) { + String sessionid = request.getSessionid(false); + if (sessionid != null) info = userService.current(sessionid); + if (info != null) request.currentUser(info); //必须赋值给request.currentUser + } if (info == null) { response.finishJson(RET_UNLOGIN); return; diff --git a/test/org/redkale/test/rest/UserInfo.java b/test/org/redkale/test/rest/UserInfo.java index 70c1167c7..3f9123e2e 100644 --- a/test/org/redkale/test/rest/UserInfo.java +++ b/test/org/redkale/test/rest/UserInfo.java @@ -1,5 +1,6 @@ package org.redkale.test.rest; +import javax.persistence.Id; import org.redkale.convert.json.JsonFactory; /** @@ -9,6 +10,7 @@ import org.redkale.convert.json.JsonFactory; */ public class UserInfo { + @Id private int userid; private String username = ""; diff --git a/test/org/redkale/test/rest/_DynHelloRestServlet1.java b/test/org/redkale/test/rest/_DynHelloRestServlet1.java index 04a3fb701..7aa0c1c96 100644 --- a/test/org/redkale/test/rest/_DynHelloRestServlet1.java +++ b/test/org/redkale/test/rest/_DynHelloRestServlet1.java @@ -64,7 +64,7 @@ public class _DynHelloRestServlet1 extends SimpleRestServlet { HelloEntity bean = req.getJsonParameter(HelloEntity.class, "bean"); bean.setClientaddr(req.getRemoteAddr()); bean.setResname(req.getHeader("hello-res")); - UserInfo user = currentUser(req); + UserInfo user = req.currentUser(); RetResult result = service.createHello(user, bean, req.getBodyJson(Map.class)); resp.finishJson(result); } diff --git a/test/org/redkale/test/rest/_DynHelloRestServlet2.java b/test/org/redkale/test/rest/_DynHelloRestServlet2.java index 81dbaef34..61dde48bd 100644 --- a/test/org/redkale/test/rest/_DynHelloRestServlet2.java +++ b/test/org/redkale/test/rest/_DynHelloRestServlet2.java @@ -36,7 +36,7 @@ public class _DynHelloRestServlet2 extends SimpleRestServlet { bean.setResname(req.getHeader("hello-res")); bean.setBodys(req.getBody()); bean.setBodystr(req.getBodyUTF8()); - UserInfo user = currentUser(req); + UserInfo user = req.currentUser(); RetResult result = service.createHello(user, bean); resp.finishJson(result); }