当前位置: 首页 > 知识库问答 >
问题:

IBMSBT:CommunityService。updateCommunityLogo(文件,communityUuid)触发注销?

景麒
2023-03-14

我想使用社区服务。updateCommunityLogo(文件,communityUuid)为新创建的社区设置徽标。

虽然调用运行时没有错误,但徽标没有更改。

当我查看apache时。http。wire日志,它显示以下对话:

>> PUT /communities/service/html/image?communityUuid=6e700c5d-082c-497f-8657-d516a01f62e7 HTTP/1.1 (without data so far)

<< HTTP/1.1 100 Continue

>> (binary data of image)

apache.http.wire(78): << "HTTP/1.1 100 Continue[EOL]"
apache.http.wire(78): << "[EOL]"
impl.conn.DefaultClientConnection(229): Receiving response: HTTP/1.1 100 Continue
apache.http.headers(232): << HTTP/1.1 100 Continue
apache.http.wire(78): << "HTTP/1.1 200 OK[EOL]"
impl.conn.DefaultClientConnection(229): Receiving response: HTTP/1.1 200 OK
apache.http.headers(232): << HTTP/1.1 200 OK
apache.http.wire(64): << "<script language="JavaScript1.2">[\n]"
apache.http.wire(64): << "     document.cookie = "CommunitiesReqURL=" + location.href + "; expires=" +[\n]"
apache.http.wire(64): << "         new Date(new Date().getTime() + 365*24*60*60*1000).toGMTString() + "; path=/communities";[\n]"
apache.http.wire(64): << "     location.href = "/communities/service/html/login";[\n]"
apache.http.wire(64): << "</script>[\n]"

我跳过了一些细节,如日期、内容字段等。从标题和电线,但这基本上是发生的。

这又是来自web应用程序内部的请求处理的一部分,web应用程序应该在Connections实例上自动执行某些操作。因此,该web应用程序将把原始用户请求的答案作为web页面呈现给用户。这又包含了一个社区框架,该框架在这里被更改了——但是在这一步之后,用户被迫在全窗口模式下重新登录连接(尽管LTPA令牌是“新鲜的”)。

因此,我怀疑呼叫社区服务。updateCommunityLogo(文件,communityUuid)强制重新验证并销毁/使当前LTPA令牌或已验证会话无效。

这里发生了什么?

我能做些什么呢?

备注:

实际上,我无法访问任何连接日志。

连接实例是v4。5并在IBM SBT中使用BasicAuth直接访问,但在浏览器中使用基于表单的身份验证。

SBT版本1.0.2.20140527-1807,包括使用maven 3.0.5,部署在tomcat 7.0.53Java7。

共有2个答案

卫浩瀚
2023-03-14

IBMSBTSDK1.0.3解决了这个问题:使用相同的应用程序代码和1.0.2/1.0.3进行的测试表明,1.0.2在这里有缺陷,但在1.0.3中,这个问题得到了修复。

此外,服务器端已经从IC4.5升级到IC5.0,但对于1.0.2 IBM SBT SDK,IC5也不接受该徽标。因此,它可能是两个:IC45-

徐瀚
2023-03-14

实际上,它很可能与该API的100 continue有关

我写了一篇关于它的文章http://bastide.org/2014/06/19/expect-100/对于J2EE应用程序,导航到托管bean。xml。找到要为其禁用的终结点,添加托管属性。forceDisableExpectedContinue true

我为此编写的一些示例代码。。。

public static void main(String[] args){
        URL url;
        try {



            String imageUrl = "https://servername.com/communities/service/html/image?communityUuid=1e244250-6740-4949-aaac-682707a47099";
            String imageType = "image/png";

            String folder = "/Users/paulbastide/Desktop/";
            String fileName = "demo.png";
            File file = new File(folder + fileName);
            long fileLength = 0l;

            String userAgent = "Apache-HttpClient/4.3.3 (java 1.5)";
            String auth = "Basic =";

            url = new URL(imageUrl);
            HttpsURLConnection httpCon = (HttpsURLConnection) url.openConnection();
            httpCon.setDoOutput(true);

            //https://code.google.com/p/misc-utils/wiki/JavaHttpsUrl
            // Create a trust manager that does not validate certificate chains
            final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {

                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] arg0, String arg1)
                        throws CertificateException {
                    // TODO Auto-generated method stub

                }
                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] arg0, String arg1)
                        throws CertificateException {
                    // TODO Auto-generated method stub

                }
            } };

            // Install the all-trusting trust manager
            final SSLContext sslContext = SSLContext.getInstance( "SSL" );
            sslContext.init( null, trustAllCerts, new java.security.SecureRandom() );
            // Create an ssl socket factory with our all-trusting manager
            final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            httpCon.setSSLSocketFactory( sslSocketFactory );

            /**
             * adds the cookies
             */
            httpCon.setRequestProperty("Cookie", "");

            // Responds to two operations PUT and DELETE
            httpCon.setRequestMethod("PUT");

            httpCon.setRequestProperty("Content-Type", imageType );
            httpCon.setRequestProperty("slug", fileName);
            httpCon.setRequestProperty("Content-Length", "" + fileLength );
            httpCon.setRequestProperty("Content-Encoding", "binary");
            httpCon.setRequestProperty("User-Agent", userAgent);
            httpCon.setRequestProperty("Authorization", auth);

            byte[] fileBytes = FileUtils.readFileToByteArray( file);

            DataOutputStream out = new DataOutputStream(
                httpCon.getOutputStream());
            out.write(fileBytes);
            out.close();
            httpCon.getInputStream();

            System.out.println("The Response Code is " + httpCon.getResponseCode());

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }


    }
 类似资料:
  • 事件注册与触发 事件注册 取消事件注册 事件触发 eventTarget 事件注册 eventTarget.addEventListener(type,listener,[useCapture]) var elem = document.getElementById('div1'); var clickHandler = function(event){ // TO DO } elem.add

  • 问题内容: 我有一个通过node.js运行的JS文件,因此通常我会打开一个终端窗口并输入类似内容,然后它会整天运行;好玩 然后,当我想重新启动它时,我按下Ctrl-c,然后退出。然后,我可以再次运行命令。 现在,我想做的是能够通过网页执行此操作,以便我的用户可以运行特定的JS文件,也可以“重新引导”它们。 因此有两个问题: 有可能,如果可以,我如何开始? 它安全吗?如果不安全,可以安全吗? 基于s

  • 20.2.4 使用触发文件 如果您使用不断编译被修改文件的IDE,那么可能只希望在特定时刻触发重启。要做到这点,您可以使用“触发文件”,它是一个特殊的文件,当您实际想要实发重启检查时修改该文件。改动文件只会触发检查,只有当Devtools检测到必须执行某些操作时重启才会发生。触发文件可以手动更新,也可以通过IDE插件更新。 要使用触发文件,请使用spring.devtools.restart.tr

  • 我有一个 Blob 存储容器,其中配置了事件网格触发器(Blob 已创建)。我正在通过数据工厂加载此 blob 存储文件,很多时候,许多文件可能会在一次尝试中出现在此 blob 中。也许我们可以举一个20个文件的例子。 好消息是我的事件网格触发器启动了,函数app被调用。然而,我发现有时对于同一个文件,事件网格触发器被触发了不止一次。 在这20个文件中,很少有文件非常大,比如300 MB,但其他文

  • 问题内容: 我的整个项目都使用(Bluebird)Promises,但是有一个使用EventEmitter的特定库。 我想要实现以下目标: 我在Promises链中读了EventEmitter的答案。这给了我一种执行’connect’事件的回调的方法。这是我到目前为止所到之处 现在如何进一步链接“ eventB”? 问题答案: 我假设您想为每个事件做不同的事情。即使由的动作触发,您也可以将其视为另

  • 使用mui.trigger()方法可以动态触发特定DOM元素上的事件。 .trigger( element , event , data ) element Type: Element 触发事件的DOM元素 event Type: String 事件名字,例如:'tap'、'swipeleft' data Type: Object 需要传递给事件的业务参数 示例 自动触发按钮的点击事件: var