我的简单@Controller要求对某些资源的请求进行身份验证。
@PreAuthorize("hasRole('ROLE_ADMIN')")
@RequestMapping(value = "/confidential**", method = RequestMethod.GET)
public String confidential(Model model) {
return "confidential";
}
如果我没有登录并尝试访问/保密,则会显示我的自定义登录页面。这很好。我可以输入我的凭据,我将被重定向到机密页面。
@Controller
@RequestMapping(LoginController.ROOT_MAPPING)
public class LoginController {
@RequestMapping("/login**")
public String login(HttpServletRequest request, Model model) {
// model.addAttribute("requestedResource", requestedResource);
return "login";
}
}
现在我有另一项要求。我需要在login()方法级别知道所请求的资源地址(如“/ confidential”)。我需要这个来为我的登录页面必须支持的Facebook OAuth2身份验证创建redirection_uri。
HttpServletRequest对象仅包含有关当前请求(“/ login”)及其参数的信息。
答案 0 :(得分:1)
我知道如何只有“/机密”请求但是使用此代码,您应该拥有整个初始网址:
@Controller
@RequestMapping(LoginController.ROOT_MAPPING)
public class LoginController {
@RequestMapping("/login**")
public String login(HttpServletRequest request, Model model) {
// model.addAttribute("requestedResource", requestedResource);
SavedRequest savedRequest =
new HttpSessionRequestCache().getRequest(request, response);
String url = savedRequest.getRedirectUrl();
// do what you want with url variable and OAuth...
return "login";
}
}
如果您只想要一部分网址,则应使用正则表达式提取URI,上下文,服务器名称...