app使用标准的Oauth2协议获取accessToken

This commit is contained in:
winLsy
2018-01-21 15:20:25 +08:00
parent 22b069a0e9
commit 87c4c2a2f5
10 changed files with 62 additions and 11 deletions
@@ -2,7 +2,7 @@ package com.micro.fast.security.app.config.authorization2;
import com.micro.fast.security.app.config.component.MsAuthenticationFailureHandler;
import com.micro.fast.security.app.config.component.MsAuthenticationSuccessHandler;
import com.micro.fast.security.app.social.OpenIdAuthenticationSecurityConfig;
import com.micro.fast.security.app.social.openid.OpenIdAuthenticationSecurityConfig;
import com.micro.fast.security.core.authentication.mobile.SmsCodeAuthenticationSecurityConfig;
import com.micro.fast.security.core.master.SecurityConstants;
import com.micro.fast.security.core.master.SecurityProperties;
@@ -0,0 +1,24 @@
package com.micro.fast.security.app.social.impl;
import com.micro.fast.security.core.social.SocialAuthenticationFilterPostProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.social.security.SocialAuthenticationFilter;
import org.springframework.stereotype.Component;
/**
* 社交登录成功后的后处理器实现
* @author lsy
*/
@Component
public class AppSocialAuthenticationFilterProcessor implements SocialAuthenticationFilterPostProcessor {
@Autowired
private AuthenticationSuccessHandler successHandler;
@Override
public void process(SocialAuthenticationFilter socialAuthenticationFilter) {
//传入授权成功处理器
socialAuthenticationFilter.setAuthenticationSuccessHandler(successHandler);
}
}
@@ -1,4 +1,4 @@
package com.micro.fast.security.app.social;
package com.micro.fast.security.app.social.openid;
import com.micro.fast.security.core.master.SecurityConstants;
import org.springframework.security.authentication.AuthenticationServiceException;
@@ -1,15 +1,12 @@
package com.micro.fast.security.app.social;
package com.micro.fast.security.app.social.openid;
import com.micro.fast.security.core.authentication.mobile.SmsCodeAuthenticationToken;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.InternalAuthenticationServiceException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.social.connect.UsersConnectionRepository;
import org.springframework.social.security.SocialUserDetails;
import org.springframework.social.security.SocialUserDetailsService;
import java.util.HashSet;
@@ -1,4 +1,4 @@
package com.micro.fast.security.app.social;
package com.micro.fast.security.app.social.openid;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
@@ -9,6 +9,10 @@ import org.springframework.social.security.SpringSocialConfigurer;
*/
public class MsSpringSocialConfigurer extends SpringSocialConfigurer{
/**
* 验证登录后处理器
*/
private SocialAuthenticationFilterPostProcessor socialAuthenticationFilterPostProcessor;
/**
* 第三方登录的url
*/
@@ -29,6 +33,18 @@ public class MsSpringSocialConfigurer extends SpringSocialConfigurer{
SocialAuthenticationFilter filter = (SocialAuthenticationFilter) super.postProcess(object);
//设置第三方登录的url
filter.setFilterProcessesUrl(this.filterProcessUrl);
//如果后处理器不为空,我们就把filter传递给自定义的后处理器
if (socialAuthenticationFilterPostProcessor != null){
socialAuthenticationFilterPostProcessor.process(filter);
}
return (T) filter;
}
public SocialAuthenticationFilterPostProcessor getSocialAuthenticationFilterPostProcessor() {
return socialAuthenticationFilterPostProcessor;
}
public void setSocialAuthenticationFilterPostProcessor(SocialAuthenticationFilterPostProcessor socialAuthenticationFilterPostProcessor) {
this.socialAuthenticationFilterPostProcessor = socialAuthenticationFilterPostProcessor;
}
}
@@ -0,0 +1,10 @@
package com.micro.fast.security.core.social;
import org.springframework.social.security.SocialAuthenticationFilter;
/**
* @author lsy
*/
public interface SocialAuthenticationFilterPostProcessor {
void process(SocialAuthenticationFilter socialAuthenticationFilter);
}
@@ -37,8 +37,11 @@ public class SocialConfig extends SocialConfigurerAdapter{
@Autowired
private ConnectionFactoryLocator connectionFactoryLocator;
@Autowired
@Autowired(required = false)
private ConnectionSignUp connectionSignUp;
@Autowired(required = false)
private SocialAuthenticationFilterPostProcessor socialAuthenticationFilterPostProcessor;
/**
*
* @param connectionFactoryLocator
@@ -58,7 +61,7 @@ public class SocialConfig extends SocialConfigurerAdapter{
}
/**
* springSocial的配置的bean
* springSocialconfigure的配置的bean
* @return
*/
@Bean
@@ -67,6 +70,8 @@ public class SocialConfig extends SocialConfigurerAdapter{
MsSpringSocialConfigurer msSpringSocialConfigurer = new MsSpringSocialConfigurer(social.getFilterProcessUrl());
// 设置第三方登录用户不存在的时候,注册或绑定的页面。如果设置为空则不跳转
msSpringSocialConfigurer.signupUrl(securityProperties.getBrowser().getSignUpUrl());
//注入后处理器
msSpringSocialConfigurer.setSocialAuthenticationFilterPostProcessor(socialAuthenticationFilterPostProcessor);
return msSpringSocialConfigurer;
}
@@ -2,7 +2,6 @@ package com.micro.fast.security.core.social;
import com.micro.fast.security.core.social.qq.QQSocialProperties;
import com.micro.fast.security.core.social.wechat.WeChatSocialProperties;
import com.micro.fast.security.core.social.wechat.api.WeChat;
/**
* 第三方登录配置类