开发者社区> 问答> 正文

Java Spring Boot 2.5 如何进行安全实战?

Java Spring Boot 2.5 如何进行安全实战?

展开
收起
1358896759097293 2021-05-01 11:53:55 704 0
1 条回答
写回答
取消 提交回答
  • 45271990@qq.com

    (一)Spring Security Demo 在之前的WEB架构基本上,可以加入门的starter-security的依赖,入完以后,会提供必要的安全组件,默认的就是security组件,当然也可以替换,两个都可以配置。实现代码如下:

    <dependencies>
     ...
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId> spring-boot-starter-security </artifactId>
    </dependency>
     ...
    </dependencies>
    
    

    (二)WebSecurityConfig 早期的Spring1.x几版本中,需要自己显示去关闭或者开放安全验证,现在的基本上默认是已经启动了。可以直接设置WebSecurityConfig配置文件,注入必要的安全配置规则,比如基于某个内路由规则、针对order订单的身份验证等,甚至加入角色的限制都可以实现,提供了强大的规则。 WebSecurityConfig总结:

    1. Spring Security的配置类;
    1. WebSecurityConfig;
    2. 可以配置安全规则;
    3. 默认启用basic验证;
    4. Spring Security可以在配置文件中关闭;

    5. security.basic.enabled = false。

    (三)Web全站安全验证配置 下面这段代码,是Web全站安全验证配置的例子,针对anyRequest定制时,所有的请求都做身份验证。hasRole表示针对当前的请求访问某个地址,或者所有的请求访问时是否具备某个角色。当然这个角色或者权限的验证,需要定制扩展接口就可以了。比如连数据库或者连缓存,实现角色查询,有校验就可以了。

    @ Configuration
    @ (SecurityProperties.BASIC_AUTH_ORDER - 10)
    public class ApplicationConfigurerAdapter extends
    WebSecurityConfiguerAdapter{
     @Override
     protected void configure( http) throws
    {
     http.antMatcher("/admin/**")
     .authorizeRequests()
     .antMatchers("/admin/users").hasRole(“usersAdmin")
     .antMatchers("/admin/orders").hasRole(“ordersAdmin")
     .anyRequest().isAuthenticated();
    }
    }
    
    

    (四)重新实现验证机制 当然有一般规则,就有特殊规则,允许自定义扩展底层的API实现自定义的判断逻辑,这是良好的安全框架所具备的功能。重新实现验证机制: • WebSecurityConfig安全配置类; • UserDetailsService 接口。

    实践案例演示: 这个程序是之前的Web网站,看一下项目的依赖,通过文件依赖可以看出,相比之前的项目,数据库依然存在,还是用之前的spring data jpa,加入MySQL的数据库的链接。 23.png

    后面稍微注意一下,这里面有个starter security,加完以后,可以看一下左边的依赖包的安全组件,有包括spring security config 、spring security core、spring security web等。

    23.1.png

    下面看一下,代码具体的配置和实现,新版本默认已经集成,现在最主要的要有Web安全配置,全局配置的时候使用内存验证,实际可以对接数据库、对接缓存。当前程序的进程里面写了用户名“frankxu”,密码“1234qwer”,这种方式并不提倡。

    23.2.png

    正常情况下,可以定义特殊规则“configuer”,针对rize请求,可以匹配首页,允许首页所有的人都可以访问;针对user,做身份验证。也可以提供表单的登录模式“formLogin()”。做这个例子,是提供这种访问HOME可以不做身份验证的方法,可以直接进入。

    23.3.png

    查询数据库Get all,演示在浏览器输入“localhost:8081”,启动网址,会发现一个问题,访问一个接口时,比如user查看所有用户,会自动跳转到“login”。当请求一个地址的时候,发现不是可忽略的地址,会自动拦截,跳转到登录界面,这个登录界面是基于表单。 这时会要求输入用户账号和密码,用户账号和密码是定义死的。

    23.4.png

    为我之已经测试过了,点击登录,“Users/gerAll”就可以访问了, 23.5.png

    如上图所示,出现了3个账号和密码,这3个账号全部返回出来了。当然这里还有别的接口,“GetById” 23.6.png

    测试一下,输入“GetById/1”,返回ID为1的账号和密码: 23.7.png

    2021-05-02 23:44:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载