一个GWT的RPC请求时常被忽略的原理

RPC请求的就是一个HttpServlet,

因此我们处理客户端的并发和权限请求时,

不要忽略采用服务端的Session原理去验证客户端请求的身份和权限,

如同jsp请求一样,通过Session则可验证请求对象的身份和权限,

从而达到对某个服务的并发处理,

而不需要过多的其他参数来验证.

要常保持清晰的思路:RPC请求就是对Servlet请求,处理问题时就可以当作请求jsp或普通Servlet那样来处理.

 

例如我们网站项目中的某个RPC服务方法:

  /**
  * 未登录抛出异常
  * 
  * @throws ApplicationException
  */
 private void isVehicleLogin() throws ApplicationException {
	//这里虽然客户端的请求并未传递任何验证身份的参数过来,
	//但是RPC请求该方法时,就是通过Http请求Servlet而来的.
	//因此可以通过服务端的Session对象判断该请求是不是跟Session里面的客户端请求是不是同一个.
	//注意: 这样处理并发的方式一定要跟普通调用方法区分开来,
	//普通调用方法时一定要靠方法的参数来区分调用者的身份,
	//而Http请求Servlet的的服务方法时,则可以通过服务端的Session对象判断请求者的身份.
	//一定要区分好Servlet的服务方法与普通对象的方法
  	UserCore loginUserCore =  getHttpSession().getAttribute("login_user_code");
 	 if (loginUserCore == null) {
   		throw new ApplicationException("未登陆,非法操作");
  	}
 }

 

如果是普通对象的方法:

  /**
  * 未登录抛出异常
  * 
  * @throws ApplicationException
  */
 private void isVehicleLogin(int userID) throws ApplicationException {
//如果是普通对象的方法,在区分调用者的身份时,只能通过方法参数的形式去区分
  UserCore loginUserCore =  findUserCodeFromDB(userID);
  if (loginUserCore == null) {
   throw new ApplicationException("未登陆,非法操作");
  }
 }

 

 

 

你可能感兴趣的:(GWT)