这是我第一次决定用完整的Java代码配置编写基于Spring Boot和Spring Security性的应用程序,我遇到了无法超越的奇怪问题。我正在尝试用Postman测试API,我的请求只有在使用内容类型为application/x-www-form-urlencoded时才被接受。下面我粘贴我的所有当前配置。
@SpringBootApplication
public class OpenIdApplication {
public static void main(String[] args) {
SpringApplication.run(OpenIdApplication.class, args);
}
}
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private UserService userService;
@Autowired
public SecurityConfig(UserService userService) {
this.userService = userService;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(11);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/register/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.cors()
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
}
@RestController
public class UserController {
...
@PostMapping(value = "/register")
public ResponseEntity<Object> registerUser(
@RequestBody UserRegistrationDto newUser, BindingResult bindingResult) {
...
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserRegistrationDto {
private String username;
private String firstName;
private String lastName;
private String email;
private String password;
private String passwordRepeat;
}
如果我想登录,我只能使用提到的内容类型。对于应用程序/json,我得到403响应状态。对于 /registrationendpoint,如果我从方法参数中删除@刚体,那么它可以很好地处理应用程序/x-www-form-urlencoded请求,但是如果我保留它,那么对于这种内容类型,我得到415,但是如果我尝试应用程序/json,那么我看到403。我还尝试在这个endpoint上方添加@Preautorize(“permitAll()”)注释,在Spring Security配置中添加http pBasic(),这导致响应状态从403更改为401。
我尝试过将2个不同的JSON发送到该endpoint:
{
"username":"test",
"firstName":"Test",
"lastName":"Test",
"email":"test@test.com",
"password":"test",
"passwordRepeat":"test",
"_csrf":"8b7d4680-5be4-482a-9138-b4eb92a358c1"
}
{
"newUser": {
"username":"test",
"firstName":"Test",
"lastName":"Test",
"email":"test@test.com",
"password":"test",
"passwordRepeat":"test"
},
"_csrf":"8b7d4680-5be4-482a-9138-b4eb92a358c1"
}
当然,每次我都要确保_csrf与从我的API返回的相匹配。
我正在使用Spring Boot 2.0.1。发布和Spring安全5.0.3。释放。
我非常确定,当您发布到/register
时,Ant模式“/register/**”
匹配所有以/register/
开头的URL(请参见此处的示例)(末尾没有斜杠)。你应该试试
.antMatchers("/register*").permitAll()
或者
.mvcMatchers(HttpMethod.POST, "/register").permitAll()
第一个匹配以/register
开头的任何URL,而第二个匹配您的@PostMapping
。
我有一个api要求在标题中发送以下参数- 内容类型-应用程序/x-www. form-urlencoded AuthKey-(会话令牌) 以及正文中的以下参数(表单日,即键值对) storeId-1 类型-产品 类别ID-324 但是每当我点击这个api,我总是得到401(未授权)错误。我已经尝试使用MultipartRequest正文和formBody,我知道这与正文无关(它的头,我需要发送内容
请求参数: 我想使用以下方法在Spring MVC中获取请求参数: 类定义如下: 发送请求时,我收到错误信息: bean类[com.example.demo.param.User]的无效属性“detail[gender]:非法获取属性“detail”引发异常;嵌套的异常是org。springframework。豆。NullValueInTestedPathException:bean类[com.e
当内容类型为application/x-www-form-urlencoded;charset=UTF-8并且请求正文为text或application/json时,如何在控制器中进行post映射。我读到@RequestBody不能与UrlenCoded一起工作。如何重新发行这个问题。
我正在尝试为我的网站创建一个简单的登录功能。我使用JAVA作为后端,并尝试使用restservices。我的学校给了我一个带有身份验证的登录系统的例子。不幸的是,我遇到了这个错误:java。lang.IllegalStateException:当请求实体的内容类型不是application/x-www-form-urlencoded]时,使用@FormParam。
我已经通过邮递员发送了标题Content-Type=Application/x-www-form-urlencoded的POST请求。 我得到了PHP中的数组,格式如下。我无法在PHP页面中访问。我该如何解决这个问题? 结果是
我正在使用OpenAPI生成器生成Spring REST API。下面是一个片段: 它生成一个Spring REST API方法(只是一个有趣的方法): 然后,我想使用从集成测试中调用它: 我得到一个错误: 我对服务器端进行了一点调试,看起来它需要一个多部分的内容,但我不明白为什么。 内容类型为application/x-www-form-urlencoded的Http Post请求在Spring