在 v2.0.X 中无法使用 Spring Cloud + boot 调用 /encrypt 端点
Posted
技术标签:
【中文标题】在 v2.0.X 中无法使用 Spring Cloud + boot 调用 /encrypt 端点【英文标题】:Unable to call the /encrypt endpoint with Spring Cloud + boot in v2.0.X 【发布时间】:2019-02-07 05:52:28 【问题描述】:我使用的是 Spring Cloud and Security 示例。在这个例子中,我使用的是 Spring Boot 版本1.4.1.RELEASE
。 Spring Boot 父版本为2.0.4.RELASE
。在我更新端点之后的依赖项的那一刻开始中断。
我已经查看了Spring Cloud Config - Encrypt Password 和文档http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html,但不知道为什么会出现 forbiddeb 错误。
我尝试使用 CURL 和 POSTMAN,得到了禁止的错误。
C:\Users\pc>curl localhost:8888/encrypt -d connectionstring=server123;user=root;password@word1 "timestamp":"2018-09-01T12:53:17.382+0000","status":403,"error":"Forbidden","message":"Forbidden","path":"/encrypt" C:\用户\pc>
注意:我的服务器在 8888 端口上运行正常,并且已添加 JCE 文件
发帖:http://localhost:8888/encrypt
我在下面使用的代码
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring-cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
application.yml
---
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls
search-paths:
- 'station*'
repos:
perf:
pattern:
- "*/perf"
uri : https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls-perf
search-paths :
- 'station*'
# Enable security for Basic Auth
security:
user:
name: ABC_123
password: ABC##123
bootstrap.properties
encrypt.key=ABCDEFGHIJKLMNOPQRSTUVWXYZ
WebSecurityConfig.java
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests().antMatchers("/").permitAll();
项目结构:
【问题讨论】:
【参考方案1】:问题是Spring Security默认开启了csrf保护。您可以阅读here 了解更多信息。
只需禁用 csrf 保护将有助于 /encrypt 再次访问。
http.csrf().disable()
.authorizeRequests().mvcMatchers(HttpMethod.POST, "/encrypt/**")
.permitAll();
【讨论】:
【参考方案2】:thanh ngo 答案对我有用,但做了一些修改。
首先,如果您在 Spring Boot 上尝试此操作,mvcMatcher 可能无法正常工作。如果你只是在练习,你可以简单地使用
http.authorizeRequests().anyRequest().permitAll().and().csrf().disable();
整个班级看起来像
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests().anyRequest().permitAll().and().csrf().disable();
【讨论】:
以上是关于在 v2.0.X 中无法使用 Spring Cloud + boot 调用 /encrypt 端点的主要内容,如果未能解决你的问题,请参考以下文章
小知识:SpringCloudConfigServer从git获取配置信息报错:.c.s.e.MultipleJGitEnvironmentRepository : Error occured clo
将 Sencha Architect 项目从 Sencha Touch v2.0.x 更新到 Sencha Touch 2.1.x
Spring+Mybatis类型转换的问题,oracle数据库中有一个clob类型,怎样在查询以后转换为String类型?