代码之家  ›  专栏  ›  技术社区  ›  Mahmoud Saleh

让程序记住我?

  •  1
  • Mahmoud Saleh  · 技术社区  · 14 年前

    大家好 我的登录表单不使用spring登录配置,它是一个自定义登录表单(我必须这样做) 我想知道如何通过编程让用户记住 如果他选中了“记住我”复选框 注意:我们有另一个登录表单,它使用spring登录配置,并在remember me服务中使用持久令牌方法。 有什么想法吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Grant Cermak    14 年前

    如果你想改变“记住我”的工作方式,你需要扩展 AbstractRememberMeServices TokenBasedRememberMeServices

    然后,您需要通过 services-ref 配置xml文件中remember me指令的指令:

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

    如果你能对你的设置和目标更具体一点,我也许能提供更详细的帮助。

    授予

        2
  •  0
  •   dube    14 年前

    我假设您使用自定义表单,但仍然调用spring登录url(j_spring_security_check)。

    为什么不在您的自定义登录表单上使用remember me字段(_spring_security_remember_me)?

        3
  •  0
  •   max_dev    9 年前

    手动记住 在手动授权期间,

    @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;
    }
    
    推荐文章