请求Java实现登录认证URL并携带凭证POST JSON数据的示例代码
Java微服务实现:认证后提交POST请求
技术选型说明
基于Spring Boot构建微服务,使用RestTemplate处理HTTP请求(新手友好,快速上手),核心是通过会话Cookie管理JSESSIONID,并携带CSRF Token完成请求。
第一步:添加Maven依赖
在pom.xml中引入Spring Boot Web核心依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
第二步:配置RestTemplate(会话Cookie自动维护)
创建配置类,让RestTemplate支持Cookie持久化,登录后的JSESSIONID会自动保留在后续请求中:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); return new RestTemplate(factory); } }
第三步:核心业务逻辑实现
封装登录和数据提交的Service类,对应你需要的两步操作:
import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.Map; @Service public class AuthPostService { private final RestTemplate restTemplate; // 注入配置好的RestTemplate public AuthPostService(RestTemplate restTemplate) { this.restTemplate = restTemplate; } // 固定登录URL private static final String LOGIN_URL = "http://your-auth-domain/login"; // 固定目标POST URL private static final String SUBMIT_URL = "http://your-target-domain/submit-data"; /** * 登录获取CSRF Token(JSESSIONID由RestTemplate自动维护) */ public String login(String username, String password) { // 构造登录请求体(字段名根据实际接口调整) Map<String, String> loginParams = new HashMap<>(); loginParams.put("username", username); loginParams.put("password", password); // 发送登录请求 ResponseEntity<String> loginResp = restTemplate.postForEntity( LOGIN_URL, loginParams, String.class ); // 从响应Header提取CSRF Token(如果Token在响应体,就解析JSON获取) String csrfToken = loginResp.getHeaders().getFirst("X-CSRF-Token"); // 示例:如果Token在响应体JSON中,用Jackson解析 // ObjectMapper mapper = new ObjectMapper(); // LoginResult result = mapper.readValue(loginResp.getBody(), LoginResult.class); // String csrfToken = result.getCsrfToken(); return csrfToken; } /** * 携带凭证提交JSON数据 */ public String submitData(String csrfToken, Map<String, Object> submitPayload) { // 构造请求Header,设置CSRF Token和JSON格式 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.set("X-CSRF-Token", csrfToken); // 封装请求实体 HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(submitPayload, headers); // 发送POST请求 ResponseEntity<String> resp = restTemplate.exchange( SUBMIT_URL, HttpMethod.POST, requestEntity, String.class ); return resp.getBody(); } }
第四步:微服务对外接口(Controller)
创建Controller作为调用入口,接收前端或其他服务的请求:
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.Map; @RestController public class SubmitController { private final AuthPostService authPostService; public SubmitController(AuthPostService authPostService) { this.authPostService = authPostService; } @PostMapping("/execute-submit") public String executeSubmit(@RequestBody Map<String, Object> requestParams) { // 从请求参数中获取登录信息和提交数据 String username = (String) requestParams.get("username"); String password = (String) requestParams.get("password"); Map<String, Object> submitData = (Map<String, Object>) requestParams.get("submitData"); // 执行登录+提交流程 String csrfToken = authPostService.login(username, password); return authPostService.submitData(csrfToken, submitData); } }
关键注意事项
- CSRF Token提取:根据实际接口返回位置调整,可能在响应Header或响应体JSON中,对应修改提取逻辑。
- 请求体格式:如果登录接口要求表单提交,就用
MultiValueMap作为请求体;如果是JSON,保持示例中的Map或自定义实体类即可。 - 异常处理:实际项目中需添加异常捕获(如登录失败、请求超时),可通过
try-catch或Spring全局异常处理器实现。
内容的提问来源于stack exchange,提问作者Tejaswi Kopparthi
相关产品推荐
相关产品推荐

