请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

OAuth2客户端怎么配置登陆失败重定向url?

我设置困难的原因:

  1. public class SecurityConfig extends WebSecurityConfigurerAdapter里如果要配置failureUrl,需要配置

    http.formLogin()或http.oauth2Login(),作为oauth2客户端,formLogin不合适本场景;oauth2Login我不会使用。所以此方案放弃。

  2. 如果在.properties文件里做配置,找了,没有此项配置。放弃。

  3. 重新配置一个OAuth2ClientAuthenticationProcessingFilter,并加到过滤器链里。我的代码如下:

  4. @Bean
    public OAuth2ClientAuthenticationProcessingFilter oAuth2ClientAuthenticationProcessingFilter() {
        OAuth2ClientAuthenticationProcessingFilter oAuth2ClientAuthenticationProcessingFilter = new OAuth2ClientAuthenticationProcessingFilter("/login");
        SimpleUrlAuthenticationFailureHandler simpleUrlAuthenticationFailureHandler = new SimpleUrlAuthenticationFailureHandler("/error/session-expired.html");
        oAuth2ClientAuthenticationProcessingFilter.setAuthenticationFailureHandler(simpleUrlAuthenticationFailureHandler);
        AuthorizationCodeResourceDetails authorizationCodeResourceDetails = new AuthorizationCodeResourceDetails();
        authorizationCodeResourceDetails.setClientId(clientId);
        authorizationCodeResourceDetails.setClientSecret(clientSecret);
        List<String> scopes = new ArrayList<>();
        scopes.add("all");
        authorizationCodeResourceDetails.setScope(scopes);
        authorizationCodeResourceDetails.setUserAuthorizationUri(serverAddr + "/oauth/authorize");
        authorizationCodeResourceDetails.setAccessTokenUri(serverAddr + "/oauth/token");
        authorizationCodeResourceDetails.setPreEstablishedRedirectUri("http://192.168.101.232:8082/login");
        OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(authorizationCodeResourceDetails);
        oAuth2ClientAuthenticationProcessingFilter.setRestTemplate(oAuth2RestTemplate);
        DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey("cdslyk912");
        TokenStore tokenStore = new JwtTokenStore(converter);
        defaultTokenServices.setTokenStore(tokenStore);
        oAuth2ClientAuthenticationProcessingFilter.setTokenServices(defaultTokenServices);
        return oAuth2ClientAuthenticationProcessingFilter;
    }

    由于是自己配置OAuth2ClientAuthenticationProcessingFilter,所以不止要配simpleUrlAuthenticationFailureHandler,其他的也得重新配。authorizationCodeResourceDetails.setPreEstablishedRedirectUri我不知道该怎么配,配成客户端的登录处理器,由于这个url没有在queryString上传state参数,所以授权失败。但是我这里获取不到state参数啊。放弃。

现在我的做法很不好,我把包名和spring security的SimpleUrlAuthenticationFailureHandler建成一样的,并设置defaultFailureUrl,覆盖spring security的配置,成功了。


但jojo老师,有配置的方法可以完成吗?我想要多一个方法。

正在回答

1回答

我们就是用的formLogin配置的啊,“formLogin不合适本场景”是出于什么考虑?

0 回复 有任何疑惑可以回复我~
  • 这是oauth2的客户端,登录用的是OAuth2ClientAuthenticationProcessingFilter。用formLogin来配置的话,实际上是配置的UsernamePasswordAuthenticationFilter,我这理解对吗?对的话,所以说不合适本场景啊。
    回复 有任何疑惑可以回复我~ 2019-10-28 15:31:55
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信