参考博客文档
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/shutdown
management.context-path=/manage
#设置actuator功能的ip、端口,服务器需要打开相应端口给本项目,否则访问会被拒绝
management.port=8081
management.address=127.0.0.1
#If you don’t want to expose endpoints over HTTP you can set the management port to -1:
#若不想通过http暴露,可以将端口设置为-1
management.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()
//其他配置省略
}
测试系统为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这一配置,说明可以通过其他协议来实现。
个人博客