Вы можете настроить 2 провайдера: один поставщик LDAP и другой поставщик DAO.
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider ref="yourLdapAuthenticationProvider" />
<sec:authentication-provider ref="yourDaoAuthenticationProvider" />
</sec:authentication-manager>
Если LDAP не удался, он вернется к поставщику аутентификации DAO.
Вам нужно будет настроить свой собственный фильтр аутентификации, чтобы ввести этот флаг в yourDaoAuthenticationProvider
так, что, когда аутентификация возвращается к yourDaoAuthenticationProvider
, он может проверить, следует ли продолжать с дальнейшей аутентификации (например, в развитии) или игнорировать его (скажем, в производстве). Таким образом, в вашем authenticationFilter
, переопределяют setDetails()
хранить флаг: -
myAuthenticationFilter боб
@Override
protected void setDetails(HttpServletRequest request, UsernamePasswordAuthenticationToken authRequest) {
YourObject yourObject = new YourObject(request.getParameter("devAuthAgainstDAO"));
authRequest.setDetails(yourObject);
}
При этом есть свой yourDaoAuthenticationProvider
проверить против этого флага, прежде чем приступить к дальнейшей аутентификации.
В конце концов, ваша конфигурация будет выглядеть следующим образом: -
<sec:http auto-config="false" entry-point-ref="loginUrlAuthenticationEntryPoint">
<sec:logout logout-success-url="/login.jsp"/>
<sec:intercept-url ... />
<sec:custom-filter position="FORM_LOGIN_FILTER" ref="myAuthenticationFilter"/>
</sec:http>
<bean id="myAuthenticationFilter" class="[YOUR_CUSTOM_AUTHENTICATION_FILTER]">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="authenticationFailureHandler" ref="failureHandler"/>
<property name="authenticationSuccessHandler" ref="successHandler"/>
</bean>
<bean id="loginUrlAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<property name="loginFormUrl" value="/login.jsp"/>
</bean>
<bean id="successHandler"
class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
<property name="defaultTargetUrl" value="/welcome.jsp"/>
<property name="alwaysUseDefaultTargetUrl" value="true"/>
</bean>
<bean id="failureHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<property name="defaultFailureUrl" value="/login.jsp?login_error=1"/>
</bean>
<bean id="yourLdapAuthenticationProvider" ... />
<bean id="yourDaoAuthenticationProvider" ... />
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider ref="yourLdapAuthenticationProvider"/>
<sec:authentication-provider ref="yourDaoAuthenticationProvider"/>
</sec:authentication-manager>
Добавить все эти роли для пользователя в базе данных? – OrangeDog
нет, но я могу понять их программно. это требование является чем-то вроде взлома, это будет сделано только в dev - у меня есть немного места для написания дрянных хаков – mkoryak