Spring Security - раздел динамического входа - PullRequest
2 голосов
/ 04 июня 2011


Мое приложение разделено на бренды. Каждый сотрудник может войти в свой собственный бренд / ы. Это означает, что один сотрудник с авторизацией на одном бренде не может войти на другой бренд. У одного пользователя может быть несколько брендов.

ссылка для входа должна выглядеть так: myapp.com/Management/login/#www.brand.com Я проанализирую www.brand.com в JS и добавлю переменную при входе пользователя в систему:

j_brand:www.brand.com  
j_username:user  
j_password:pass  
  1. как я могу проверить в процессе входа в систему, что этот пользователь принадлежит бренду, к которому он просит войти, а также отклонить его запрос, если он не совпадает.

  2. когда пользователь выходит из системы, я хочу перенаправить его на нужную страницу с брендом: myapp.com/Management/login/#www.brand.com, как я могу добавить #www.brand.com к пути перенаправления.

Я использую UserDetailsService в процессе входа в систему.

Спасибо.

1 Ответ

3 голосов
/ 04 июня 2011

Итак, вот возможный ответ для части 1. Я не знаю о вашем втором вопросе, хотя у меня есть идея, которую вы можете продолжить.Я сделал нечто похожее, изменив процесс входа в систему.

Для части 1 есть два шага:

Первый: написать собственный фильтр безопасности, который добавляет дополнительную проверку бренда.

public class BrandAwareUserPasswordAuthenticationkFilter extends UsernamePasswordAuthenticationFilter {   

    @Override
    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
        Authencation auth = super.attemptAuthentication(request, response);

        if(!userBelongsToBrand()) {    // you're on your own here
            throw new BadCredentialsException("your message here"); // you can elect to throw a different exception
        }

        return auth;
    }
}

Второе. Создайте свой фильтр и подключите его для обеспечения безопасности вместо установленного по умолчанию фильтра аутентификации пользователя / пароля.Возможно, вы захотите поиграть с некоторыми настройками конфигурации, которые есть у меня здесь ... Я копирую их из файла моего проекта.

<bean name="brandAwareFilterBean" class="com.drumpus.webapp.LoginVelocityCheckFilter">
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="filterProcessesUrl" value="/doLogin"/>
    <property name="authenticationSuccessHandler">
        <bean class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
            <property name="defaultTargetUrl" value="/account/"/>
            <property name="alwaysUseDefaultTargetUrl" value="false"/>
        </bean>
    </property>
    <property name="authenticationFailureHandler">
        <bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
            <property name="defaultFailureUrl" value="/login?failed=true"/>
        </bean>
    </property>
</bean>


<security:http auto-config="false" use-expressions="true" entry-point-ref="authenticationEntryPoint">

    <security:custom-filter position="FORM_LOGIN_FILTER" ref="brandAwareFilterBean"/>

    <!-- the rest of your config -->

</security:http>

По вопросу № 2, я думаю, ваш ключ будет искать в созданиипользовательский AuthenticationSuccessHandler и подключив его к новому фильтру.Однако, никогда не делая этого, я не могу дать вам очень конкретного совета.

Удачи, и надеюсь, что это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...