请求的资源地址在自定义登录页面上可见

时间:2015-04-23 09:05:13

标签: java spring-mvc spring-security oauth-2.0

我的简单@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”)及其参数的信息。

1 个答案:

答案 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,上下文,服务器名称...