В моем приложении мы используем OAuth для мобильного приложения с паролем grant_type
Ниже приведен мой XML-конфиг для OAuth
<security:http pattern="/rest/mobile/**" create-session="never"
access-decision-manager-ref="accessDecisionManager" entry-point-ref="oauthAuthenticationEntryPoint"
use-expressions="true" auto-config="true">
<security:anonymous enabled="false" />
<security:custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
<security:custom-filter ref="corsFilter" position="CORS_FILTER"/>
<security:intercept-url pattern="/rest/mobile/**" access="isAuthenticated()" />
<security:access-denied-handler ref="oauthAccessDeniedHandler" />
<security:expression-handler ref="oauthWebExpressionHandler" />
<security:csrf disabled="true" />
</security:http>
<bean id="corsFilter" class="com.testapp.dev.auth.CorsFilter"/>
<!-- OAuth2 Authentication Entry Point -->
<bean id="oauthAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
<property name="realmName" value="conference" />
</bean>
<bean id="oauthAccessDeniedHandler"
class="org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler" />
<bean id="accessDecisionManager" class="org.springframework.security.access.vote.UnanimousBased">
<constructor-arg>
<list>
<bean class="org.springframework.security.oauth2.provider.vote.ScopeVoter" />
<bean class="org.springframework.security.access.vote.AuthenticatedVoter" />
<bean
class="org.springframework.security.web.access.expression.WebExpressionVoter">
<property name="expressionHandler" ref="oauthWebExpressionHandler" />
</bean>
</list>
</constructor-arg>
</bean>
<oauth:web-expression-handler id="oauthWebExpressionHandler" />
<!-- OAuth2 Token Generation Services -->
<security:http pattern="/oauth/token" create-session="stateless"
authentication-manager-ref="clientAuthenticationManager">
<security:anonymous enabled="false" />
<security:http-basic entry-point-ref="clientAuthenticationEntryPoint" />
<security:access-denied-handler ref="oauthAccessDeniedHandler" />
<security:csrf disabled="true" />
</security:http>
<bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices">
<property name="tokenStore" ref="tokenStore" />
<property name="supportRefreshToken" value="true" />
<property name="clientDetailsService" ref="clientDetails" />
</bean>
<bean id="tokenStore" class="org.springframework.security.oauth2.provider.token.store.JdbcTokenStore">
<constructor-arg ref="jdbcTemplateDataSource" />
<property name="authenticationKeyGenerator">
<bean class="com.testapp.dev.auth.UniqueAuthenticationKeyGenerator" />
</property>
</bean>
<bean id="approvalStore" class="org.springframework.security.oauth2.provider.approval.TokenApprovalStore">
<property name="tokenStore" ref="tokenStore" />
</bean>
<bean id="userApprovalHandler"
class="org.springframework.security.oauth2.provider.approval.ApprovalStoreUserApprovalHandler">
<property name="approvalStore" ref="approvalStore" />
<property name="clientDetailsService" ref="clientDetails" />
<property name="requestFactory">
<bean
class="org.springframework.security.oauth2.provider.request.DefaultOAuth2RequestFactory">
<constructor-arg index="0" ref="clientDetails" />
</bean>
</property>
</bean>
<!-- OAuth2 Authorization Server -->
<oauth:authorization-server
client-details-service-ref="clientDetails" token-services-ref="tokenServices"
user-approval-handler-ref="userApprovalHandler">
<oauth:authorization-code authorization-code-services-ref="JdbcAuthorizationCodeServices" />
<oauth:implicit />
<oauth:refresh-token />
<oauth:client-credentials />
<oauth:password />
</oauth:authorization-server>
<!-- OAuth2 Protected Resources Server -->
<oauth:resource-server id="resourceServerFilter" resource-id="conference" token-services-ref="tokenServices" />
<bean id="clientAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
<property name="realmName" value="conference/client" />
<property name="typeName" value="Basic" />
</bean>
<bean id="clientDetailsUserService" class="org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService">
<constructor-arg ref="clientDetails" />
</bean>
<!-- OAuth2 Client's Authentication Manager -->
<security:authentication-manager id="clientAuthenticationManager">
<security:authentication-provider user-service-ref="clientDetailsUserService" />
</security:authentication-manager>
<bean id= "clientDetails" class="org.springframework.security.oauth2.provider.client.JdbcClientDetailsService">
<beans:constructor-arg ref="jdbcTemplateDataSource"/>
</bean>
<bean id="JdbcAuthorizationCodeServices" class="org.springframework.security.oauth2.provider.code.JdbcAuthorizationCodeServices">
<constructor-arg ref="jdbcTemplateDataSource" />
</bean>
Я хочу добавить логику при сбое входа в систему, т. Е. Когда учетные данные пользователя неверны для пароля типа предоставления, я хочу добавить логику для обработки попытки входа в систему и после определенной попытки сказать 3, что реагировать на пользовательский интерфейс, чтобы принять пользователя к экран забытого пароля.
Я не уверен, как я могу это сделать, любая пользовательская реализация некоторого определенного класса OAuth, чтобы я мог получить дескриптор, когда имя пользователя / пароль неверны, и чем я могу добавить свою логику.
Любая помощь приветствуется !!!