Безопасность Spring запомнить меня с помощью customAuthenticationProvider

Я использую провайдера CustomAuthentication для аутентификации, который расширяет AbstractUserDetailsAuthenticationProvider. Это мне пришлось сделать, потому что я хотел аутентифицироваться в веб-службе и нуждался как в идентификаторе пользователя, так и в пароле. Это был единственный класс, который позволил мне это сделать. Теперь я столкнулся с проблемами реализации функции запоминания для этого, вот мой файл контекста безопасности -

<http auto-config="true">
    <intercept-url pattern="/j_spring_security_check" access="IS_AUTHENTICATED_ANONYMOUSLY"/>       
    <intercept-url pattern="/dashboard*" access="ROLE_USER" />
    <form-login login-page="/login.html" default-target-url="/dashboard1.html#meetings"
        authentication-failure-url="/loginFailed.html" />
    <logout logout-success-url="/login.html" />
</http>

<beans:bean name="customAuthenticationProvider" class = "com.component.WebServiceUserDetailsAuthenticationProvider"/>

<authentication-manager>
  <authentication-provider ref = "customAuthenticationProvider"/>
</authentication-manager>

</beans:beans>  

Теперь я пытаюсь реализовать «запомнить меня», но это вынуждает меня иметь службу сведений о пользователе, которую я не могу иметь, поскольку мне нужно и имя пользователя, и пароль для повторной аутентификации моей веб-службы, и метод, предоставляемый userdetailservice, дает только имя пользователя, а не пароль, и это причина, по которой мне пришлось использовать customAuthentication в первую очередь.


person Hemant    schedule 11.06.2013    source источник
comment
На самом деле вы не сказали, в чем заключаются ваши проблемы, поэтому вам, вероятно, следует отредактировать свой вопрос, чтобы уточнить. Кроме того, вам не нужно расширять AbstractUserDetailsAuthenticationProvider. Вы можете просто реализовать интерфейс AuthenticationProvider напрямую.   -  person Shaun the Sheep    schedule 11.06.2013
comment
Привет Люк, я закончил свой вопрос сейчас. И AbstractUserDeta..... Я использовал, потому что хотел предоставить реализацию только для аутентификации метода, и для этого предназначен abstractUs..   -  person Hemant    schedule 13.06.2013


Ответы (1)


«Запомнить меня» — это альтернативный способ аутентификации пользователя, поэтому, когда он получает файл cookie «запомнить меня», ему необходимо проверить его и загрузить информацию для пользователя, чтобы предоставить ее приложению. Для этого он использует интерфейс UserDetailsService.

Базовая реализация TokenBasedRememberMeServices требует доступа к паролю для проверки токена. Если ваша система не может этого обеспечить, вы не можете ее использовать.

Альтернативой является PersistentTokenBasedRememberMeServices, который использует базу данных для хранения токенов «запомнить меня». Ему не нужен доступ к паролю, но вам все равно нужно будет реализовать UserDetailsService, чтобы он мог загружать информацию для аутентифицированного пользователя. Возвращаемый объект UserDetails не обязательно должен содержать пароль, но он должен содержать как минимум имя пользователя, чтобы вы могли определить, кто вошел в систему.

person Shaun the Sheep    schedule 14.06.2013