Я использую Spring Boot + Rest + Spring Security (Basic Auth) в качестве моего внутреннего API.Я могу свернуться с помощью GET, но я не могу свернуться с помощью POST.
Я использую application.property + WebSecurityConfigurerAdapter для установки моей безопасности.
Application.property
spring.security.user.name=a
spring.security.user.password=b
WebSecurityConfigurerAdapter
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
}
}
Контроллер
@RestController
@RequestMapping(value="/api")
public class ExploreController {
Logger logger = LoggerFactory.getLogger(ExploreController.class);
@RequestMapping(value="/exploregethead", method = RequestMethod.GET)
public HashMap<String, String> exploregethead(HttpServletRequest request, HttpServletResponse response) {
Enumeration headerNames = request.getHeaderNames();
HashMap<String, String> map = new HashMap<>();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);
logger.info(key + " : " + value);
map.put(key, value);
}
return map;
}
@RequestMapping(value="/exploreposthead", method = RequestMethod.POST)
public HashMap<String, String> exploreposthead(HttpServletRequest request, HttpServletResponse response) {
Enumeration headerNames = request.getHeaderNames();
HashMap<String, String> map = new HashMap<>();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);
logger.info(key + " : " + value);
map.put(key, value);
}
return map;
}
}
для CORS
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
final HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
response.setHeader("Access-Control-Max-Age", "3600");
if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) servletRequest).getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
}
Оба остальных запроса аналогичны, за исключением того, что один принимает GET идругой принимает POST.
Я использую curl, чтобы проверить его, и у меня два разных вывода.
curl -i -X GET -H "Authorization:Basic YTpi" http://localhost:8080/api/exploregethead
GET Result
Когда я использую curl для POST API, я сталкиваюсь с ошибкой 401
curl -i -X POST -H "Authorization:Basic YTpi" http://localhost:8080/api/exploreposthead
POST Result
Я пытался использовать оставшийся клиент для POST API, он запрашиваетмне ввести имя пользователя и пароль.Но я ввел имя пользователя 'a' и пароль 'b', он все еще не работает.
Rest Client
Пожалуйста, сообщите часть, которую я сделал неправильно.Спасибо.