zoukankan      html  css  js  c++  java
  • spring-boot启用security组件 · 下

    前言

    经过昨天和前天的分享,我们对security有了一些基本的认识,同时也可以基于它做一些简单的应用,但是学习知识不能一知半解,这样即不方便应用,也不方便我们对知识的整体理解和掌握,所以为了能够对security有更深入的了解和认识,我们今天还是继续了解sercurity组件。

    今天的内容主要是对HttpSecurity的配置做一些补充说明,为我们明天做完整demo做准备,好了,下面我们直接开始吧。

    自定义登录

    今天我们主要分享自定义登录相关内容。

    修改配置

    首先我们要修改配置类,我们先说configure(HttpSecurity http)方法:

    下面我们分块讲解,先说资源权限配置。

    资源权限配置

    这一块昨天其实也说过了,但是涉及的规则比较多,所以还是要多试多实践

    http.authorizeRequests()
                // 限定 ” /user/welcome ”请求赋予角色 ROLE_USER 或者 ROLE_ADMIN
                .antMatchers("/welcome").hasAnyRole("USER", "ADMIN", "TEST")
                // 限定 ” /admin/ ”下所有请求权限赋予角色 ROLE_ADMIN
                .antMatchers("/admin/**").hasAnyAuthority("ROLE_ADMIN")
                .antMatchers("/test/**").hasAnyAuthority("ROLE_TEST", "ROLE_ADMIN")
                .antMatchers("/user/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")
                // 其他路径允许签名后访问
                .anyRequest().permitAll()
                // 对于没有配置权限的其他请求允许匿名访问
                .and().anonymous()
    

    先解释下上面的权限配置,第一行配置的/welcome,仅允许角色为USERADMINTEST的用户访问,这个是但个资源设定访问权限;

    第二行指定的是/admin/**,仅允许拥有管理权限的用户访问,因为是通配符,所以admin/路径下的所有资源都可以访问;

    第三行和第四行的配置和第二行差不多,不过访问权限指定的是多权限,只要具备其中一个权限即可访问;

    第五行和第六行是设定其他未设定权限的资源访问权限,一般只指定一种即可。关于两者的区别,网上有种说法是,匿名资源只允许不登录的用户访问,已登录的用户无法访问,而permitAll没有这种限制,但是我实际测试发现,两者没有本质区别,等后续深入了解之后再来探讨吧,有小伙伴清楚的,也可以留言,让我们都知道下。

    登录页面设置

    这里主要是设置登录相关的处理接口和页面,通过这里的配置,我们可以用自己的接口替换security组件的默认配置,实现更灵活的鉴权设置。

    // 使用spring security 默认的登录页面
    			// 设置登录相关页面
                .and().formLogin()
                // 登录页
                .loginPage("/userLogin")
                // 登录处理接口
                .loginProcessingUrl("/loginService")
                 // 登录成跳转理页面
                .successForwardUrl("/user/welcome")
                 // 登录成功处理器
                .successHandler(successHandler)
                // 默认成功页面
                .defaultSuccessUrl("/welcome")
                // 失败跳转页面
                .failureForwardUrl("/fail")           
                // 失败处理器
                .failureHandler(handler)
    

    这里,我们简单解释下,第三行设置的是登录页面,也就是我们前天分享内容中的登录页:

    第四行设置的是登录处理接口,这里必须是post接口,如果是get接口登录的时候,返回是有问题的:

    经过我的实测,发现前端请求的时候必须是post(不论后端是post还是get,这也说明在spring-boot中,get接口是支持post方式请求,但是反过来不行),如果是get请求,就是上面的错误。

    第五行设置的是登录成功后的页面;

    第六行设置的是登录成功处理器,这个和第五行的页面是冲突的,但是后面的配置会覆盖前面的设置(谁在后面就会覆盖前面的设置),这里我们可以根据自己的需要设定返回值的类型,比如json

    第七行设置的是默认登录成功页,和第五行设置的一样,这个设置也会和处理器冲突,区别是第五行的设置会跳转到新的页面,地址栏会发生改变,第七行的设置会返回一个新的页面替换当前页面的内容,但是地址栏不会发生变化,就像forwardsendRedirect的区别。

    第八行设置失败跳转页面,这里和第五行类似,不过是跳转失败页;

    最后一个设置的是失败处理器,这里我们可以设定的自己的处理器,让他返回json

    其他配置

    这里主要讲两个设置,一个就是用户的remeberMe设置,和跨域攻击验证设置。

     // 记住我,token过期时间,用户cookie名
                .and().rememberMe().tokenValiditySeconds(30).key("remember-me")
                // 启动 HTTP 基础验证
                .and().httpBasic().and()
                // 禁用跨域csrf验证
                .csrf().disable();
    

    remeberMe设置的是用户的cookie信息,tokenValiditySeconds设置的token过期时间,key设置的是cookie的名字。但是这里设置了,好像没啥用,应该是我打开方式不对,后面再研究下。

    最后一行设置的是禁用csrf校验,如果你的接口有跨域登录的错误的话,解决方法就是禁用跨域校验。

    总结

    今天主要是一些补充内容,相比昨天会更细致,内容也更丰富,但是还有一些内容还没分享,比如登录成功处理器、登录失败处理器、登录认证处理器等,这些内容我打算明天放到具体实例中分享,所以明天的内容也很多,明天我会分享一个security的实例,实现完整的登录鉴权等操作,让大家可以更直观地认识security,好了,今天就先到这里吧!

  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/caoleiCoding/p/15061274.html
Copyright © 2011-2022 走看看