Итак, вот возможный ответ для части 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
и подключив его к новому фильтру.Однако, никогда не делая этого, я не могу дать вам очень конкретного совета.
Удачи, и надеюсь, что это поможет!