我有一个简单的spring boot应用程序,它有一个POST rest api方法来注册用户。当我通过邮递员测试它时,这工作得很完美。但当我从我的移动应用程序中测试它时,这总是抛出一个403。这在选项级别失败,因为我没有看到我的后端记录一个尝试的请求。
对于这个问题,通常的解决方案是在spring安全配置中禁用csrf
。有趣的是,我这个残疾人还得403分。我已经尽我所能地寻找了很多,但还是找不到一个解决办法,为什么这仍然是失败的。感谢任何人提供的任何帮助。
下面是安全配置。
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
// Some beans that are not relevant
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/register").permitAll()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and().exceptionHandling().accessDeniedHandler(accessDeniedHandler)
.and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
}
我认为还值得一提的是,我还尝试过添加cors
disable选项,但没有任何效果。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.authorizeRequests()
.antMatchers("/register").permitAll()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and().exceptionHandling().accessDeniedHandler(accessDeniedHandler)
.and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
这就是我控制器的样子
@RestController
public class AuthenticationResource {
// Wiring and other methods
@RequestMapping(value = "/register", method = RequestMethod.POST)
public ResponseEntity<?> registerNewUser(@Valid @RequestBody UserRegistrationRequest request) {
if (!request.getConfirmPassword().equals(request.getPassword())) {
throw new MyException(ErrorUtil.generateErrorFieldsValue("password", "confirmPassword"),
"Passwords do not match!", HttpStatus.BAD_REQUEST);
}
UserAccountResponse savedUserAccount = userAccountService.save(request);
return ResponseEntity.ok(savedUserAccount);
}
}
如果需要任何其他细节,请告诉我。
据我所知,正如您所建议的,这与CORS有关,但是通过使用http.CORS()
您告诉spring寻找一个名为corsfilter()
的bean。在我的其他项目中,我就是这样解决的。
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource configSource = new
UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
// GET , POST, HEAD
config.applyPermitDefaultValues();
config.addAllowedMethod(HttpMethod.PUT);
config.addAllowedMethod(HttpMethod.DELETE);
config.addAllowedMethod(HttpMethod.OPTIONS);
configSource.registerCorsConfiguration("/**", config);
return new CorsFilter(configSource);
}
问题内容: 这是我的代码: 我的回应是: 500服务器错误 我打开我的变量,然后看到: POST / rest / platform / domain / list HTTP / 1.1 即使我曾经将其设置为GET,为什么也将其设置为POST ? 问题答案: 将请求方法隐式设置为POST,因为这是您要发送请求正文时的默认方法。 如果要使用GET,请删除该行并删除该行。您无需发送GET请求的请求正文
问题内容: 禁止(403)CSRF验证失败。请求中止。即使使用{%csrf_token%}我正在尝试在django中进行登录,但出现此错误,我检查了CSRF文档,但对我来说没有任何用处。 这是HTML: 就像你在上面看到的那样,我使用了{%csrf_token%},并且在已安装的应用程序中有“ django.middleware.csrf.CsrfViewMiddleware”。 我的看法是: 我
我正在制作一个小应用程序,我可以使用spring-boot保存用户详细信息。我创建了实体及其相应的存储库。当我发出帖子请求以添加用户的用户对象的id时,该id在保存到数据时为空base.Thisid在MySQL中自动生成(自动增量)。从POST请求中,我得到3个字段,即用户名、电子邮件、密码。用户类包含字段id、用户名、电子邮件、密码。我添加了注释 作为 id 字段。构造函数是 我的用户服务类 我
问题内容: 即使执行catch块并抛出第二个Exception,也会在此代码中进行设置? 问题答案: 是的,finally块始终运行…除非以下情况: 运行try-catch-finally块的线程被杀死或中断 你用 基础虚拟机以其他方式被破坏 基础硬件在某种程度上无法使用 另外,如果您的finally块中的方法抛出未捕获的异常,则此后将不执行任何操作(即,该异常将像在其他任何代码中一样被引发)。发
问题内容: 在花了最后一天使这项工作完成之后,我发现我回过头来遇到开始时遇到的相同错误: 错误:意外请求:GET test-directive.html 我正在使用Karma和Jasmine在Angular中测试指令。我在StackOverflow上浏览了类似的问题,但发现在其他示例中尝试过的所有方法均无济于事。 代码结构 Test-App -src --bower --lib --js --mo
错误: 错误:在XMLHttpRequest.HandleError(XHR.JS:99)的createError(createError.js:16)处出现网络错误。CORS策略阻止了从源“http://localhost:3001/user/login”访问“http://localhost:3000”处的XMLHttpRequest:“请求头字段Access-Control-Allog-Or