spring boot 安全关闭服务,结合spring security

来源:互联网 发布:快递 知乎 编辑:程序博客网 时间:2024/05/21 17:18

参考博客文档

Spring Boot的应用启动与关闭

Windows下使用CURL命令

curl 命令使用

spring boot 官方文档

项目中已有spring security 配置的情况下,通过curl命令安全关闭spring boot服务。

pom.xml

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

application.properties

#开启actuator的shutdown功能endpoints.shutdown.enabled=true#默认情况下 roles 为ACTUATOR,当以basic验证访问时需要匹配此权限management.security.roles=ADMIN#The application.properties example above will change the endpoint from /{id} to /manage/{id} (e.g. /manage/info).#隐藏默认接口需要,例如使用shutdown时,需要访问/manage/shutdownmanagement.context-path=/manage#设置actuator功能的ip、端口,服务器需要打开相应端口给本项目,否则访问会被拒绝management.port=8081management.address=127.0.0.1#If you don’t want to expose endpoints over HTTP you can set the management port to -1:#若不想通过http暴露,可以将端口设置为-1management.port=-1

security配置类

    @Override    protected void configure(HttpSecurity http) throws Exception{        http.authorizeRequests().antMatchers("/").permitAll()                //安全关闭服务接口,拥有ADMIN权限的用户可以访问该rul                .antMatchers("/shutdown").hasRole("ADMIN")                // 其他地址的访问均需验证权限(需要登录)                .anyRequest().authenticated().and()                //开启basic认证,若不添加此项,将不能通过curl的basic方式传递用户信息                .httpBasic()                //其他配置省略    }

步骤

  1. 项目已有用户、权限信息,即security已经配置好
  2. 向pom.xml中添加依赖
  3. 向application.properties添加相应配置,其中==endpoints.shutdown.enabled=true,management.security.roles=ADMIN==为必要项(roles是数据库中已有的权限)。程序会按顺序校验curl上的用户是否存在,是否拥有权限访问该url,是否匹配application.properties中设置的权限。任何一项有错,都不能关闭该服务。
  4. 向security配置中,加入如下配置
    • .antMatchers(“/shutdown”).hasRole(“ADMIN”) ,权限为数据库中已有权限,拥有该权限的用户才能关闭服务。
    • .httpBasic() 开启basic认证。

测试

==测试系统为windows 10,tomcat 7 ,项目打包为war文件 ,需要下载curl。通过cmd命令行发送相应请求。XXXXXX为项目名。请求格式为curl -u username:password -X POST url:port/XXXXXX/shutdown==
curl下载

账号密码不正确的情况(后台 log 信息 Bad credentials)

C:\Users\Administrator>curl -u hello:123456 -X POST http://127.0.0.1:8080/XXXXXX/shutdown

账号密码正确,但账号不够权限的情况

C:\Users\Administrator>curl -u admin:123456 -X POST http://127.0.0.1:8080/XXXXXX/shutdown
{“timestamp”:1513656721981,”status”:403,”error”:”Forbidden”,”message”:”Access is denied”,”path”:”/XXXXXX/shutdown”}

账号密码正确,且拥有相应权限的情况

C:\Users\Administrator>curl -u lsw:123456 -X POST http://127.0.0.1:8080/XXXXXX/shutdown
{“message”:”Shutting down, bye…”}

总结

curl通过base64加密用户名,密码,相当于明文数据库中的用户信息传输。系统设计时可以在 spring security 上多花点心思,通过限定访问的IP来达到安全效果(.hasIpAddress(“210.210.210.210/24”))。通过http来关闭服务只是一种手段,application.properties中有management.port=-1这一配置,说明可以通过其他协议来实现。