[英]How to redirect after session has expired using an interceptor Spring mvc
[英]Java Spring MVC forward/redirect POST request using interceptor
我有一个Spring MVC应用程序,该应用程序允许用户通过以下调用添加/删除收藏夹:
POST /api/users/123/favorites/456
(将项目456添加为用户123的收藏) DELETE /api/users/123/favorites/456
(将项目456删除为用户123的收藏) 我还想支持以下两个完全相同的调用(假设用户123已登录):
POST /api/users/me/favorites/456
DELETE /api/users/me/favorites/456
我创建了一个拦截器,如下所示:
public class UserMeInterceptor extends HandlerInterceptorAdapter{
public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler ) throws Exception{
Integer userId = AccessControlUtil.getUserId();
String redirectUrl = request.getContextPath() + request.getRequestURI().replace( "/me/", "/" + userId + "/" );
if( redirectUrl.endsWith( "/me" ) ){
redirectUrl = redirectUrl.replace( "/me", "/" + userId );
}
response.sendRedirect( redirectUrl );
response.flushBuffer();
return false;
}
}
这种方法很好用,但仅适用于GET请求。 我可以通过任何方式转发/重定向POST请求并维护所有POST数据和方法类型吗? 理想情况下,我想重用已经定义的相同控制器来处理ID传入时的情况。
那么这种方法呢:
@RequestMapping("/api/users/{userId}/favorites/{favoriteId}")
public String clientsByGym(@PathVariable("userId") String userId, @PathVariable("favoriteId") Long favoriteId) {
Integer theUserId = null;
if("me".equals(userId)) {
theUserId = AccessControlUtil.getUserId()
} else {
theUserId = Integer.valueOf(userId);
}
...
}
基本上,让您的方法接受userId的String,然后从那里可以确定它是'me'还是实际的userId值。 这样一来,您就不必搞乱重定向了。 如果您必须一直这样做,则可以制作如下的帮助方法:
public Integer getUserId(String userId) {
return "me".equals(userId) ? AccessControlUtil.getUserId() : Integer.valueOf(userId);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.