我设置困难的原因:
public class SecurityConfig extends WebSecurityConfigurerAdapter里如果要配置failureUrl,需要配置
http.formLogin()或http.oauth2Login(),作为oauth2客户端,formLogin不合适本场景;oauth2Login我不会使用。所以此方案放弃。
如果在.properties文件里做配置,找了,没有此项配置。放弃。
重新配置一个OAuth2ClientAuthenticationProcessingFilter,并加到过滤器链里。我的代码如下:
@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老师,有配置的方法可以完成吗?我想要多一个方法。
Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全
了解课程