我需要构建一个使用来自外部公司的RESTful应用程序接口的应用程序。我使用的数据是敏感的,因此它显然需要HTTPS。

我的问题是,我能够从外部公司读取信息,而不需要配置任何类型的SSL证书。我不需要在我的代码中进行任何类型的加密/解密。

唯一能让我相信数据是安全的是,RESTful调用只适用于URL中的https,而不适用于http

我正在使用Spring RestTemplate来使用web服务,如下所示:

List<Info> getInfo(Map<String, Object> urlParamMap, HttpSession httpSession){
    HttpEntity<String> request = new HttpEntity<String>(httpSession.getHttpHeaders());
    restTemplate.setMessageConverters(httpSession.getMessageConverterList());

    ResponseEntity<JsonData> responseEntity = restTemplate.exchange("https://outsideOrg.com/{parameter}, HttpMethod.GET, request, JsonData.class, urlParamMap);

    List<Info> infoList = responseEntity.getBody().getInfoList();

    return infoList;
}

这是我的一些http设置,包括授权和一些反序列化设置:

public class HttpSession {

    static Logger log = Logger.getLogger(HttpSession.class);

    private HttpHeaders httpHeaders;
    private List<HttpMessageConverter<?>> messageConverterList;

    HttpHeaders getHttpHeaders() {
        return httpHeaders;
    }

    void setHttpHeaders(HttpHeaders httpHeaders) {
        this.httpHeaders = httpHeaders;
    }

    List<HttpMessageConverter<?>> getMessageConverterList() {
        return messageConverterList;
    }

    void setMessageConverterList(List<HttpMessageConverter<?>> messageConverterList) {
        this.messageConverterList = messageConverterList;
    }

    void createHeaders(){
        HttpHeaders httpHeaders = new HttpHeaders();  
        try {
            File xmlFile = new File("C:/Users/User/docs/RestAuth.xml");
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            Document document = documentBuilder.parse(xmlFile);

            String username = document.getElementsByTagName("username").item(0).getTextContent();
            String password = document.getElementsByTagName("password").item(0).getTextContent(); 

            String authorization = username + ":" + password;
            byte[] encodedAuthorization = Base64.encodeBase64(authorization.getBytes(Charset.forName("US-ASCII")));   
            String authorizationHeader = "Basic " + new String(encodedAuthorization);

            httpHeaders.set("Authorization", authorizationHeader);
            httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

        }catch (ParserConfigurationException | SAXException | IOException e) {
            log.error("There was an error setting the credentials.", e);
        }
        this.httpHeaders = httpHeaders;
    }      

    void setupMessageConverters(){
        List<HttpMessageConverter<?>> messageConverterList = new ArrayList<>();
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
        messageConverter.setObjectMapper(objectMapper);
        messageConverterList.add(messageConverter);

        this.messageConverterList = messageConverterList;
    }

我很困惑,我需要做的所有事情都包括SSL证书,如果需要的话,并对数据进行加密/解密。外部站点在没有要求SSL证书的情况下返回看似未加密的信息是不是有问题?

我是SSL的新手,一般情况下对REST也比较陌生,所以请原谅我对这个主题的无知。任何可以提供的帮助或资源,我都将不胜感激!

转载请注明出处:http://www.sdxiangshi.com/article/20230401/976246.html

随机推荐

  1. 在application.properties文件中使用Azure DevOps的变量组,还是使用安全文件更好?

    在我的Azure DevOps用户界面中,我转到了管道-库-变量组。我在那里声明了一个新的组,以便存储私有凭据。对于我的项目,我希望在其中存储client_id和client_secret,所以我不会在Spring Boot应用程序的app...

  2. 使用安全连接时出现的Jetty 9 WebSocket客户端问题

    我正在使用Jetty9.4.18库在java应用程序中编写一个WebSocket客户机。我是WebSockets的新手,所以我开始使用Jetty文档中的两个示例类连接到echo.websocket.org进行测试当我不使用SSL进行连接时,...

  3. 使用安全上下文fsgroup选项挂载卷时的写入权限

    我正在尝试使用非根用户在K8S中运行tomcat容器,为此,我在Docker Image中设置了用户tomcat‘的适当权限。我有一个启动脚本,它在/opt/var/logs中创建一个目录(在容器启动期间),并启动tomcat服务。#ste...

  4. Android -使用安全参数传递参数

    在一个活动中,两个片段在切换时传递一些字符串。大堂片段 button.setOnClickListener { LobbyFragmentDirections.actionLobbyFToGameF(m...

  5. 如何在颤动中使用安全区域时填充整个区域?

    如何在颤动中使用安全区域时填充整个区域?正如你在下面看到的,我使用安全区域来包装我的黄色容器。?我的要求是,我希望黄色填充状态栏下面的区域(空白)。代码如下: @override Widget build(BuildContext c...

  6. Angular:嵌套异步管道的使用安全吗?

    我找不到任何与此相关的文档,所以它就在这里。我在一个模板中使用了异步管道:component [aliases]=(users$ | async).profile.aliases$ | async/复制当users$发出时,aliases$...

  7. 如何以编程方式使用“安全区域布局”?

    由于我不使用情节提要板来创建视图,因此我想知道是否有编程方式的“使用安全区域指南”选项或类似的选项。 我试图将我的观点锚定到 view.safeAreaLayoutGuide 但它们始终...

  8. 如何使用安全规则限制在firestore中一次仅删除一个文档?

    我有一个名为customers‘的集合,并且我已经允许对该集合的读写权限到一些users.My要求是我必须限制删除操作一次只有一个文档,为了避免批量删除collection.How我可以使用firestore安全规则来实现这一点。现在我已经...

  9. 无法加载资源,因为“应用程序传输安全性”策略要求使用安全连接

    将Xcode更新为7.0或iOS 9.0时遇到问题。它以某种方式开始给我标题错误 “无法加载资源,因为应用程序传输安全策略需要使用安全连接” Web服务方法: -(void)ServiceCall:(NSString*)Ser...

  10. 用于加密和解密报文的iOS Swift Diffie-Hellman密钥交换?使用安全Enclave

    如何使用Diffie-Hellman密钥交换来加密和解密消息?我可以生成共享密钥(对于bob和alice),但是SecKeyCopyKeyExchangeResult返回给我一个Data...how,我可以让SecKey与SecKeyCre...