This commit is contained in:
Redkale
2017-05-13 11:20:18 +08:00
parent a5756c0b4d
commit e5ce250304
6 changed files with 17 additions and 15 deletions

View File

@@ -19,8 +19,8 @@
<remoteaddr value="request.headers.X-RemoteAddress"/>
</request>
-->
<!-- 自定Rest实现类需要继承org.redkale.net.http.RestServlet不自定义则默认使用org.redkale.net.http.RestServlet -->
<rest base="org.redkale.net.http.RestServlet"/>
<!-- base指定的自定义HttpServlet子类必须标记@HttpUserType, 不设置base则视为没有当前用户信息设置 -->
<rest base="org.redkale.net.http.HttpServlet"/>
<services autoload="true"/>

View File

@@ -11,7 +11,8 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 配合 HttpServlet 使用。
* 用于指定HttpRequest.currentUser的数据类型。
* 用于指定HttpRequest.currentUser的数据类型。<br>
* 注意: 数据类型是JavaBean则必须要用javax.persistence.Id标记主键字段用于确定用户ID
*
* <p>
* 详情见: https://redkale.org
@@ -25,4 +26,5 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
public @interface HttpUserType {
Class value();
}

View File

@@ -6,7 +6,8 @@ import javax.annotation.Resource;
import org.redkale.net.http.*;
import org.redkale.service.RetResult;
public class SimpleRestServlet extends RestHttpServlet<UserInfo> {
@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<UserInfo> {
@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;

View File

@@ -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 = "";

View File

@@ -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<HelloEntity> result = service.createHello(user, bean, req.getBodyJson(Map.class));
resp.finishJson(result);
}

View File

@@ -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<HelloEntity> result = service.createHello(user, bean);
resp.finishJson(result);
}