Spring OAuth2.0将查询参数传递给登录页面

时间:2018-02-23 23:55:22

标签: spring authentication oauth-2.0

问题:我发出了需要身份验证的请求。 OAuth服务器将保存原始请求并重定向到" / login"。我需要将查询参数从原始请求传递到登录表单(在提交表单之前我需要这个,以便过滤到正确的AuthenticationProvider)。

尝试过滤super(new AntPathRequestMatcher("/login", "GET"));为时已晚。 ServletRequest已经是重定向登录。因此,我尝试创建一个扩展LoginUrlAuthenticationEntryPoint的自定义身份验证入口点。我只是在determineUrlToUseForThisRequest上进行了覆盖,以便从原始请求中追加我的查询。这个想法适用于URL,但遗憾的是Spring的登录页面不会显示,除非URL完全是" / login"。

任何关于如何解决这个问题的想法都将不胜感激!

修改/更新 这尚未经过测试,但是 - 如果我使用自定义AuthenticationEntryPoint,我可以重定向到自定义登录页面端点。此端点将接收@RequestParam并将其放入登录表单上的隐藏字段中。然后,我可以将新字段添加到WebAuthenticationDetailsSource进行POST。从这里开始,我的POST过滤器应该正确选择提供者。

1 个答案:

答案 0 :(得分:0)

我在编辑/更新中按照上面的说明配置了我的设置。有用。 1)我配置了CustomAuthenticationEntryPoint 2)做了@Override protected String determineUrlToUseForThisRequest() 使用从客户端请求传入的查询参数构建我的登录字符串。 3)LoginController执行此操作

@GetMapping("/login")
public ModelAndView showCustomLoginForm(@Valid @RequestParam(value = "realm_name", required=false) final String realmName) {
    CustomLoginForm form = new CustomLoginForm(realmName);
    return new ModelAndView(CUSTOM_LOGIN_FORM_VIEW, CUSTOM_LOGIN_FORM_MODEL, form);
}

其中realm_name是我在POST时需要的表单中的隐藏字段。