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("未登陆,非法操作");
}
}