From 30dd728b6eaf5da3a92798852d4f133fea38516d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Wed, 24 Oct 2018 14:52:49 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BA=A4?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E3=80=81=E9=AA=8C=E8=AF=81=E7=A0=81=E7=99=BB?= =?UTF-8?q?=E5=BD=95=20=E6=88=90=E5=8A=9F=E3=80=81=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E4=B8=8D=E9=80=9A=E7=9F=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/AuthorizationServerConfig.java | 8 +++--- .../auth/config/WebSecurityConfigurer.java | 6 +++-- .../PigxAuthenticationFailureEvenHandler.java | 2 +- .../mobile/MobileAuthenticationFilter.java | 25 +++++++++---------- .../mobile/MobileSecurityConfigurer.java | 11 ++++++-- 5 files changed, 30 insertions(+), 22 deletions(-) diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java index e08d45e56..01fa8afbc 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java @@ -21,6 +21,7 @@ package com.pig4cloud.pigx.auth.config; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.security.component.PigxWebResponseExceptionTranslator; +import com.pig4cloud.pigx.common.security.service.PigxClientDetailsService; import com.pig4cloud.pigx.common.security.service.PigxUserDetailsService; import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; @@ -34,7 +35,6 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.A import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; -import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService; import org.springframework.security.oauth2.provider.token.TokenEnhancer; import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; @@ -59,21 +59,21 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { - JdbcClientDetailsService clientDetailsService = new JdbcClientDetailsService(dataSource); + PigxClientDetailsService clientDetailsService = new PigxClientDetailsService(dataSource); clientDetailsService.setSelectClientDetailsSql(SecurityConstants.DEFAULT_SELECT_STATEMENT); clientDetailsService.setFindClientDetailsSql(SecurityConstants.DEFAULT_FIND_STATEMENT); clients.withClientDetails(clientDetailsService); } @Override - public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { + public void configure(AuthorizationServerSecurityConfigurer oauthServer) { oauthServer .allowFormAuthenticationForClients() .checkTokenAccess("permitAll()"); } @Override - public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { + public void configure(AuthorizationServerEndpointsConfigurer endpoints) { endpoints .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST) .tokenStore(tokenStore()) diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/WebSecurityConfigurer.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/WebSecurityConfigurer.java index 2935ee747..b68310693 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/WebSecurityConfigurer.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/WebSecurityConfigurer.java @@ -89,8 +89,10 @@ public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Bean public MobileSecurityConfigurer mobileSecurityConfigurer() { - return new MobileSecurityConfigurer(mobileLoginSuccessHandler() - , userDetailsService); + MobileSecurityConfigurer mobileSecurityConfigurer = new MobileSecurityConfigurer(); + mobileSecurityConfigurer.setMobileLoginSuccessHandler(mobileLoginSuccessHandler()); + mobileSecurityConfigurer.setUserDetailsService(userDetailsService); + return mobileSecurityConfigurer; } diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationFailureEvenHandler.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationFailureEvenHandler.java index 92e3cdfa3..ceb0321fb 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationFailureEvenHandler.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationFailureEvenHandler.java @@ -32,7 +32,7 @@ import org.springframework.stereotype.Component; public class PigxAuthenticationFailureEvenHandler extends AuthenticationFailureEvenHandler { /** - * 处理登录成功方法 + * 处理登录失败方法 *

* * @param authenticationException 登录的authentication 对象 diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java index 7eb4fdb62..98494a522 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java @@ -24,6 +24,7 @@ import org.springframework.http.HttpMethod; import org.springframework.security.authentication.AuthenticationEventPublisher; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.DefaultAuthenticationEventPublisher; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.context.SecurityContextHolder; @@ -43,7 +44,6 @@ import javax.servlet.http.HttpServletResponse; */ public class MobileAuthenticationFilter extends AbstractAuthenticationProcessingFilter { private static final String SPRING_SECURITY_FORM_MOBILE_KEY = "mobile"; - private AuthenticationEventPublisher eventPublisher = new MobileAuthenticationFilter.NullEventPublisher(); private AuthenticationEntryPoint authenticationEntryPoint = new MobileAuthenticationEntryPoint(); @Getter @Setter @@ -51,6 +51,9 @@ public class MobileAuthenticationFilter extends AbstractAuthenticationProcessing @Getter @Setter private boolean postOnly = true; + @Getter + @Setter + private AuthenticationEventPublisher eventPublisher; public MobileAuthenticationFilter() { super(new AntPathRequestMatcher(SecurityConstants.MOBILE_TOKEN_URL, "POST")); @@ -76,8 +79,13 @@ public class MobileAuthenticationFilter extends AbstractAuthenticationProcessing setDetails(request, mobileAuthenticationToken); + Authentication authResult = null; try { - return this.getAuthenticationManager().authenticate(mobileAuthenticationToken); + authResult = this.getAuthenticationManager().authenticate(mobileAuthenticationToken); + + logger.debug("Authentication success: " + authResult); + eventPublisher.publishAuthenticationSuccess(authResult); + SecurityContextHolder.getContext().setAuthentication(authResult); } catch (Exception failed) { SecurityContextHolder.clearContext(); @@ -93,7 +101,8 @@ public class MobileAuthenticationFilter extends AbstractAuthenticationProcessing logger.error("authenticationEntryPoint handle error:{}", failed); } } - return null; + + return authResult; } private String obtainMobile(HttpServletRequest request) { @@ -104,15 +113,5 @@ public class MobileAuthenticationFilter extends AbstractAuthenticationProcessing MobileAuthenticationToken authRequest) { authRequest.setDetails(authenticationDetailsSource.buildDetails(request)); } - - private static final class NullEventPublisher implements AuthenticationEventPublisher { - @Override - public void publishAuthenticationFailure(AuthenticationException exception, Authentication authentication) { - } - - @Override - public void publishAuthenticationSuccess(Authentication authentication) { - } - } } diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileSecurityConfigurer.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileSecurityConfigurer.java index f71672931..25a67aaed 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileSecurityConfigurer.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileSecurityConfigurer.java @@ -18,7 +18,10 @@ package com.pig4cloud.pigx.common.security.mobile; import com.pig4cloud.pigx.common.security.service.PigxUserDetailsService; -import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationEventPublisher; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.SecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -32,9 +35,12 @@ import org.springframework.stereotype.Component; * @date 2018/8/5 * 手机号登录配置入口 */ +@Getter +@Setter @Component -@AllArgsConstructor public class MobileSecurityConfigurer extends SecurityConfigurerAdapter { + @Autowired + private AuthenticationEventPublisher defaultAuthenticationEventPublisher; private AuthenticationSuccessHandler mobileLoginSuccessHandler; private PigxUserDetailsService userDetailsService; @@ -43,6 +49,7 @@ public class MobileSecurityConfigurer extends SecurityConfigurerAdapter