java - 在 Spring MVC 中,当我点击 CURL 然后在 Spring MVC 中出现错误
问题描述
我有一个卷曲类型的网址,
curl -i -X GET -H Accept:application/json http://localhost:8080/onyxcxm/admin/getDTMF/2
当我点击 url 并得到响应时,
HTTP/1.1 302
X-Content-Type-Options: nosniff
X-XSS-防护:1;模式=块
缓存控制:无缓存,无存储,最大年龄=0,
must-revalidate Pragma: no-cache
过期:0 X-Frame-选项:SAMEORIGIN
位置:http://localhost:8080/onyxcxm/login
内容长度:0
日期:2018 年 10 月 4 日星期四 11:36:48 GMT
在这里我的控制器喜欢,
@RequestMapping(value="/getDTMF/{dtmf}",headers = "Accept=application/json")
@ResponseBody
public ResponseEntity<String> getDTMF(@PathVariable("dtmf") String dtmf) {
System.err.println("Pressed digit is "+dtmf);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=utf-8");
return new ResponseEntity<String>(null, headers, HttpStatus.OK);
}
我的安全配置是,
protected void configure(HttpSecurity http) throws Exception {
http
.headers().addHeaderWriter(
new XFrameOptionsHeaderWriter(
XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
.and()
.authorizeRequests()
.antMatchers("/admin/**").access("hasRole('ADMIN')")
.antMatchers("/user/**").access("hasRole('USER')")
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/j_spring_security_check")
.successHandler(authenticationSuccessHandler())
.failureUrl("/login?error")
.usernameParameter("username")
.passwordParameter("password")
.and()
.logout()
.logoutUrl("/j_spring_security_logout")
.logoutSuccessHandler(logoutSuccessHandler())
.logoutSuccessUrl("/login?logout")
.invalidateHttpSession(true)
.and()
.csrf().disable();
}
我不认为我为什么会收到此错误,任何人都可以解决它吗?谢谢。
解决方案
您正在经历的行为是您自己设计的。您正在请求路径“/admin/**”下的页面,该页面需要根据您设置的安全配置进行身份验证。
所以这就是 Spring 正在做的事情:
- 检查您是否有有效的身份验证令牌
- 如果存在,则允许将调用传递给 @Controller 和 @RequestMapping
- 如果不重定向到配置的登录页面(在您的情况下为“/login”)
由于您没有提供任何安全令牌(可以通过 /login 页面上的登录获得,并且应该在标头中传递)Spring 将 CURL 请求重定向到配置的登录页面。状态码 302 的意思就是,将用户重定向到指定的页面。
对于基本身份验证,添加标题“Authorization: userHash”,在其中将 userHash 替换为 <username>:<password> 的 base64 编码字符串。有关如何使用标头的更多信息,请参阅 wikipedia Basic Access Authentication 。
推荐阅读
- textview - Android TextView 文本选择
- python - 根据来自其他数据框的列上的多个条件创建数组值列
- mysql - 获取用户的 DISTINCT id 并找到他们列的 MAX,然后 UPDATE、LARAVEL
- python - 我正在尝试在一个绘图上绘制两个函数
- python - python或dask并行生成器?
- php - 在 laravel 中使用 preg_replace
- ios - 是否有 iOS 加速方法来进行元素最大值(np.maximum)?
- javascript - 如何在 JSON 响应中解析选择的第二个 HTML 锚元素
- c# - C# WinForms TabControl 移除 Tab 并关闭子控件
- bash - bash 命令语法,变量中带有双引号的选项