自动登录(笔记)

什么是自动登录:

       当你使用一个网站时,一般需要先登录才能使用。当你经过一段时间没操作后,再操作时就会自动跳转到登录页让你重新登录。登录一次很简单,但如果是一个经常使用的网站,你可能每天要登录很多次。就像某购买火车票的网站的验证码一样,时不时的跳出来骚扰你一下,相信你很快就抓狂了,恨不得骂上几句。之所以总是让你登录,是为了避免在你离开的时候,有人用你的电脑或者账号做不好的事情,即为了保护你,是对你好。但是如果你可以确保自己的账号是安全的,不会有什么风险,还总是让你登录,你肯定会很不爽。

        为了改善用户体验,于是便有人提出了自动登录的概念。自动登录就是在登录页一般会提供一个单选框,例如叫”记住我“、”保持登录“、“n天免登录”等等。

有了这个功能,我们就可以大大减少登录的次数了。而Spring Security实现这个功能也非常简单,具体步骤如下:

(1)在login.html页面中添加”记住我“的单选框。input框的name默认必须是remember-me,可以修改。

<input type="checkbox" name="remember-me">记住我

(2)在SecurityConfig.java类中修改configure(HttpSecurity http)方法,添加rememberMe配置。

@Qualifier("customUserDetailsServiceImpl")
@Autowired
private UserDetailsService userDetailsService;

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            // 配置要控制的http URL
            .authorizeRequests()
                // 对于静态文件和页面不拦截。
                .antMatchers("/css/**", "/index").permitAll()
                // /user/下的请求只有拥有USER角色的用户才能访问
                .antMatchers("/user/**").hasRole("USER")
                // USER角色的用户可以访问/user/api/下的资源
                .antMatchers("/user/api/**").hasRole("USER")
                // ADMIN角色的用户可以访问/admin/api/下的资源
                .antMatchers("/admin/api/**").hasRole("ADMIN")
                // /app/api/下的资源不做控制
                .antMatchers("/app/api/**").permitAll()
            // 回到HttpSecurity
            .and()
            // 设置通过表单进行登录认证
            .formLogin()
                // 登录页名称(即login.html),登录页不需要权限控制
                .loginPage("/login")
                // 登录校验地址,点击登录按钮时会跳转到该地址
                .loginProcessingUrl("/loginUrl")
                // 登录错误页地址
                .failureUrl("/login-error")
            .and()
                // 添加验证码校验过滤器
                .addFilterBefore(new CaptchaFilter(), UsernamePasswordAuthenticationFilter.class)
            // 添加rememberMe配置
            .rememberMe()
                .userDetailsService(userDetailsService);
}

(3)配置已经完成了,接下来可以试一下效果。可以在登录时勾选“记住我”,session过期之后再访问页面,看是否还需要登录,如果不需要登录就证明我们的配置生效了。因为Spring Security的默认session失效时间为30分钟,我们如果傻傻的等30分钟再去验证就太耗费时间了。所以我们可以修改下session的过期时间,修改方式如下:在application.properties文件中添加server.servlet.session.timeout=1m即可,这样session的过期时间就修改为了1分钟。

 

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值