обход весны безопасности - PullRequest
0 голосов
/ 09 февраля 2011

В нашем приложении Spring Security использует ldap в качестве провайдера.

Я работаю над изменением, которое позволит вам установить флажок в dev, который позволит вам войти, если ваш пользователь / пароль соответствует значению из базы данных. возможно, сервер ldap не работает, и вы все равно можете войти.

Что я понял, так это то, что некоторые URL-адреса защищены

@Secured( {"ROLE_USER","ROLE_MERCHANT"})

поэтому мне нужно иметь дело с пружинной безопасностью, чтобы мои логины работали. Как мне это сделать?

1 Ответ

2 голосов
/ 09 февраля 2011

Можно настроить 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 bean

@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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...