我有以下...
@GetMapping("signup")
public String get(){
return "forward:/";
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws IOException {
...
if(!per.isPresent() && !request.getRequestURL().toString().contains("signup")){
response.sendRedirect("/signup");
return false;
}
}
这里的问题是,当转发到来时它没有注册,所以我重定向回去。但是,我也想拦截直接发送到根目录的请求。
有什么方法可以判断请求是否为转发请求以及原始URL是什么?
答案 0 :(得分:2)
这是我想出的解决方案。我不喜欢这个答案,并且在看起来应该是向前的信息时,我不希望不附加自定义标头。但是,由于我在文档中找不到该信息,所以我只添加了标题...
@GetMapping("")
public String get(HttpServletResponse response){
response.setHeader("signup","true");
return "forward:/";
}
然后我检查了
private static boolean isSignupForward(HttpServletResponse response){
return Boolean.valueOf(response.getHeader("signup"));
}
...
if(
!isSignupForward(response) &&
!per.isPresent() &&
!isSignup(request) &&
!isJsFile(request)
){
response.sendRedirect("/signup");
return false;
}
如果有人有更好的答案,我会离开赏金。