You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:25:26