Сделать Programmatic Запомнить меня? - PullRequest
1 голос
/ 09 ноября 2010

привет всем, что я использую Spring Security 3.0.2, и моя форма входа не использует конфигурацию Spring, это пользовательская форма входа (я должен сделать это таким образом).если он установил флажок «Запомнить меня»: у нас есть другая форма входа в систему, которая использует конфигурацию входа в Spring и использует подход «Постоянный токен» в службе «Запомнить меня»так есть идеи?

Ответы [ 3 ]

1 голос
/ 15 ноября 2010

Если вы хотите изменить работу устройства Remember-Me, вам нужно расширить AbstractRememberMeServices или TokenBasedRememberMeServices (в зависимости от того, что именно вы пытаетесь сделать).

Затем вам нужно будет указать Spring на реализацию «Помни меня» с помощью директивы services-ref директивы запомнить меня в файле XML конфигурации:

<remember-me services-ref="sword101CustomRememberMeServices" key="{GUID}" token-validity-seconds="3600" data-source-ref="dataSource"/>

Если вы можете немного подробнее рассказать о своих настройках и целях, я мог бы предоставить более подробную помощь.

Грант

0 голосов
/ 14 июля 2015

Вот как вы можете сделать RememberMe вручную во время авторизации вручную,

Сначала вы сохраняете пользователя в контексте безопасности

@Autowired 
RememberMeServices rememberMeServices;

@RequestMapping(value = "/login")
public String login(HttpServletRequest request,HttpServletResponse response) {

    Authentication auth = new UsernamePasswordAuthenticationToken(currentUser, null, currentUser.getAuthorities());
    SecurityContextHolder.getContext().setAuthentication(auth);
    rememberMeServices.loginSuccess(request, response, auth); 

}

Вот конфигурация

@Configuration
...
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;
    @Autowired
    DataSource dataSource;
    @Bean
    public RememberMeServices rememberMeServices() {
    //      TokenBasedRememberMeServices if you don't want to persist token 
    //      return new TokenBasedRememberMeServices("key", userDetailsService);
    PersistentTokenBasedRememberMeServices rememberMeServices =
            new PersistentTokenBasedRememberMeServices("key", userDetailsService, persistentTokenRepository());
    rememberMeServices.setAlwaysRemember(true);
    return rememberMeServices;
}

@Bean
public PersistentTokenRepository persistentTokenRepository() {
    JdbcTokenRepositoryImpl db = new JdbcTokenRepositoryImpl();
    db.setDataSource(dataSource);
    return db;
}
0 голосов
/ 12 ноября 2010

Я предполагаю, что вы используете пользовательскую форму, но по-прежнему вызываете весенний URL-адрес входа (j_spring_security_check).

Почему бы вам просто не использовать поле RememberMe (_spring_security_remember_me) в пользовательской форме входа в систему?

...