GVKun编程网logo

如何从Domino Java代理计划Xagent?(java 代理实现)

24

在本文中,我们将详细介绍如何从DominoJava代理计划Xagent?的各个方面,并为您提供关于java代理实现的相关解答,同时,我们也将为您带来关于ajax–Javascript:如何用Jasmi

在本文中,我们将详细介绍如何从Domino Java代理计划Xagent?的各个方面,并为您提供关于java 代理实现的相关解答,同时,我们也将为您带来关于ajax – Javascript:如何用Jasmine监视superagent?、com.intellij.psi.javadoc.JavadocManager的实例源码、Domino Agent使用/ jvm / lib / ext中的第三方jar挣扎于Java安全性、ibm-domino – Domino Admin:如何从Domino控制台或数据库中查看匿名http会话列表?的有用知识。

本文目录一览:

如何从Domino Java代理计划Xagent?(java 代理实现)

如何从Domino Java代理计划Xagent?(java 代理实现)

通过从预定的Java代理触发来尝试使Xagent按计划运行。

以下是我的xagentmail.xsp的代码,它仅向我发送电子邮件:

<?xml version="1.0" encoding="UTF-8"?><xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false"> <xp:this.beforePageLoad><![CDATA[#{javascript:// test send maildoc = database.createDocument() ;doc.replaceItemValue("Form", "memo");doc.replaceItemValue("Subject", " from xagentmail.xsp");doc.replaceItemValue("SendTo", "PDella-Nebbia@testdomain.com");doc.send();}]]></xp:this.beforePageLoad></xp:view>

使用Devin Olson的博客Scheduled
Xagents中描述的SSL-
ENCRYPTED连接方法 ,我创建了以下Schedule Domino Java代理:

import java.io.BufferedReader;  import java.io.BufferedWriter;  import java.io.InputStreamReader;  import java.io.OutputStreamWriter;  import java.net.Socket; import javax.net.ssl.SSLSocketFactory; import lotus.domino.AgentBase; public class JavaAgent extends AgentBase {  // Change these settings below to your setup as required.  static final String hostName = "server1.testdomain.com";  static final String urlFilepath = "/test/poidemo.nsf/xagentmail.xsp";  static final int sslPort = 443; public void NotesMain() {    try {      final SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();      final Socket socket = factory.createSocket(JavaAgent.hostName, JavaAgent.sslPort);     final BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));      final BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));     final StringBuilder sb = new StringBuilder();      sb.append("GET ");      sb.append(JavaAgent.urlFilepath);      sb.append(" HTTP/1.1\n");      final String command = sb.toString();     sb.setLength(0);      sb.append("Host: ");      sb.append(JavaAgent.hostName);      sb.append("\n\n");      final String hostinfo = sb.toString();     out.write(command);      out.write(hostinfo);      out.flush();     in.close();      out.close();      socket.close();   } catch (final Exception e) {      // YOUR_EXCEPTION_HANDLING_CODE    }  }  }

当我在浏览器中输入xagentmail.xsp的URL时,按预期方式收到邮件。

但是我计划的Java代理不会触发Xagent发送邮件。

我的代理和xagent都为应用程序设置了对Reader的匿名访问。我在服务器上也具有受限和非受限特权。

有任何想法吗?

答案1

小编典典

我使用下面的方法效果很好:我使用HttpURLConnection而不是BufferedWriter,并且在端口80上使用localhost直接与本地服务器通信。

这是我的代理代码:

import lotus.domino.AgentBase;import lotus.domino.Session;public class JavaAgent extends AgentBase {    @Override    public void NotesMain() {        try {            final String xpageName = "demo";            Session session = getSession();            dk.fmcgsolutions.XAgent.run(session.getAgentContext(), xpageName);        } catch (Exception e) {            e.printStackTrace();        }    }}

这是代理使用的XAgent类:

package dk.fmcgsolutions;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import lotus.domino.AgentContext;public class XAgent {    public static void run(AgentContext agentContext, String xpageName) {        try {            String dbPath = agentContext.getCurrentDatabase().getFilePath();            String url = "http://localhost/" + dbPath + "/" + xpageName + ".xsp";            System.out.println("Starting " + xpageName + " in database " + dbPath);            URL xPageURL = new URL(url);            HttpURLConnection conn = (HttpURLConnection) xPageURL.openConnection();            conn.connect();            switch (conn.getResponseCode()) {            case HttpURLConnection.HTTP_OK:                // read from the urlconnection via the bufferedreader                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));                String line;                while ((line = bufferedReader.readLine()) != null) {                    System.out.println("Response: " + line);                }                bufferedReader.close();                break;            case HttpURLConnection.HTTP_INTERNAL_ERROR:                System.out.println("Interal server error while running");                break;            default:                System.out.println("An error occurred: " + conn.getResponseCode());                System.out.println("Error message: " + conn.getResponseMessage());                break;            }            conn.disconnect();            System.out.println("Finished " + xpageName + " in database " + dbPath);        } catch (Exception e) {            e.printStackTrace();        }    }}

代理需要以运行时安全级别2运行。

ajax – Javascript:如何用Jasmine监视superagent?

ajax – Javascript:如何用Jasmine监视superagent?

我正在为应用程序使用superagent ajax库,我正在尝试为它编写一些单元测试.我有一个看起来像这样的课:
someClass = {
  getData: function(){
    _this = this;
    superagent.get('/some_url').end(function(res){
      if(res.body){
        _this.data = res.body
      }
     });
   });
 }

如何编写Jasmine测试来监视_this.data = res.body调用?在getData上使用and.callThrough()设置间谍是行不通的.我不想实际调用有问题的URL;我只是想测试一下,如果它获取数据,它会对它做些什么.

谢谢

spyOn(superagent,'get').and.callFake(function(url) {
  return {
    end: function(cb) {
      //null for no error,and object to mirror how a response would look.
      cb(null,{body: data});
    }
  }
});

com.intellij.psi.javadoc.JavadocManager的实例源码

com.intellij.psi.javadoc.JavadocManager的实例源码

项目:consulo-java    文件:JavaDocLocalinspection.java   
private void checkForPeriodindoc(PsiDocComment docComment,ArrayList<ProblemDescriptor> problems,inspectionManager manager,boolean onTheFly) {
  if (IGnorE_JAVADOC_PERIOD) return;
  PsiDocTag[] tags = docComment.getTags();
  int dotIndex = docComment.getText().indexOf('.');
  int tagOffset = 0;
  if (dotIndex >= 0) {      //need to find first valid tag
    final PsiDocCommentOwner owner = PsiTreeUtil.getParentOfType(docComment,PsiDocCommentOwner.class);
    for (PsiDocTag tag : tags) {
      final String tagName = tag.getName();
      final JavadocTagInfo tagInfo = JavadocManager.SERVICE.getInstance(tag.getProject()).getTagInfo(tagName);
      if (tagInfo != null && tagInfo.isValidInContext(owner) && !tagInfo.isInline()) {
        tagOffset = tag.getTextOffset();
        break;
      }
    }
  }

  if (dotIndex == -1 || tagOffset > 0 && dotIndex + docComment.getTextOffset() > tagOffset) {
    problems.add(manager.createProblemDescriptor(docComment.getFirstChild(),inspectionsBundle.message("inspection.javadoc.problem.descriptor1"),null,ProblemHighlightType.GENERIC_ERROR_OR_WARNING,onTheFly,false));
  }
}
项目:intellij-ce-playground    文件:PsiDocTagValueImpl.java   
@Override
public PsiReference getReference() {
  PsiDocTag docTag = PsiTreeUtil.getParentOfType(this,PsiDocTag.class);
  if (docTag == null) {
    return null;
  }
  final String name = docTag.getName();
  final JavadocManager manager = JavadocManager.SERVICE.getInstance(getProject());
  final JavadocTagInfo info = manager.getTagInfo(name);
  if (info == null) return null;

  return info.getReference(this);
}
项目:tools-idea    文件:PsiDocTagValueImpl.java   
@Override
public PsiReference getReference() {
  PsiDocTag docTag = PsiTreeUtil.getParentOfType(this,PsiDocTag.class);
  if (docTag == null) {
    return null;
  }
  final String name = docTag.getName();
  final JavadocManager manager = JavadocManager.SERVICE.getInstance(getProject());
  final JavadocTagInfo info = manager.getTagInfo(name);
  if (info == null) return null;

  return info.getReference(this);
}
项目:consulo-java    文件:PsiDocTagValueImpl.java   
@Override
public PsiReference getReference() {
  PsiDocTag docTag = PsiTreeUtil.getParentOfType(this,PsiDocTag.class);
  if (docTag == null) {
    return null;
  }
  final String name = docTag.getName();
  final JavadocManager manager = JavadocManager.SERVICE.getInstance(getProject());
  final JavadocTagInfo info = manager.getTagInfo(name);
  if (info == null) return null;

  return info.getReference(this);
}
项目:consulo-java    文件:JavaDocLocalinspection.java   
@Override
@Nullable
public ProblemDescriptor[] checkField(@NotNull PsiField psiField,@NotNull inspectionManager manager,boolean isOnTheFly) {
  if (IGnorE_DEPRECATED && (psiField.isDeprecated() || psiField.getContainingClass().isDeprecated())) {
    return null;
  }

  PsiDocComment docComment = psiField.getDocComment();
  if (docComment == null) {
    return isJavaDocrequired(psiField)
           ? new ProblemDescriptor[]{createDescriptor(psiField.getNameIdentifier(),required_JAVADOC_IS_ABSENT,manager,isOnTheFly)}
           : null;
  }

  final ArrayList<ProblemDescriptor> problems = new ArrayList<ProblemDescriptor>(2);
  ArrayList<ProblemDescriptor> tagProblems = getTagValuesProblems(psiField,docComment.getTags(),isOnTheFly);
  if (tagProblems != null) {
    problems.addAll(tagProblems);
  }
  checkInlineTags(manager,problems,docComment.getDescriptionElements(),JavadocManager.SERVICE.getInstance(docComment.getProject()),isOnTheFly);
  checkForPeriodindoc(docComment,isOnTheFly);
  checkDuplicateTags(docComment.getTags(),isOnTheFly);
  checkForBadCharacters(docComment,isOnTheFly);
  return problems.isEmpty()
         ? null
         : problems.toArray(new ProblemDescriptor[problems.size()]);
}
项目:consulo-java    文件:JavaDocLocalinspection.java   
private void checkInlineTags(final inspectionManager inspectionManager,final ArrayList<ProblemDescriptor> problems,final PsiElement[] dataElements,final JavadocManager manager,boolean isOnTheFly) {
  for (PsiElement dataElement : dataElements) {
    if (dataElement instanceof PsiInlineDocTag) {
      final PsiInlineDocTag inlineDocTag = (PsiInlineDocTag)dataElement;
      final PsiElement nameElement = inlineDocTag.getNameElement();
      if (manager.getTagInfo(inlineDocTag.getName()) == null) {
        checkTagInfo(inspectionManager,inlineDocTag,isOnTheFly,problems);
      }
      if (!IGnorE_POINT_TO_ITSELF) {
        final PsiDocTagValue value = inlineDocTag.getValueElement();
        if (value != null) {
          final PsiReference reference = value.getReference();
          if (reference != null) {
            final PsiElement ref = reference.resolve();
            if (ref != null){
              if (PsiTreeUtil.getParentOfType(inlineDocTag,PsiDocCommentOwner.class) == PsiTreeUtil.getParentOfType(ref,PsiDocCommentOwner.class,false)) {
                if (nameElement != null) {
                  problems.add(createDescriptor(nameElement,inspectionsBundle.message("inspection.javadoc.problem.pointing.to.itself"),inspectionManager,isOnTheFly));
                }
              }
            }
          }
        }
      }
    }
  }
}
项目:consulo-java    文件:JavaDocReferenceinspection.java   
public static void visitRefInDocTag(final PsiDocTag tag,final PsiElement context,final inspectionManager inspectionManager,final boolean onTheFly)
{
    final String tagName = tag.getName();
    final PsiDocTagValue value = tag.getValueElement();
    if(value == null)
    {
        return;
    }
    final JavadocTagInfo info = manager.getTagInfo(tagName);
    if(info != null && !info.isValidInContext(context))
    {
        return;
    }
    final String message = info == null || !info.isInline() ? null : info.checkTagValue(value);
    if(message != null)
    {
        problems.add(createDescriptor(value,message,onTheFly));
    }

    final PsiReference reference = value.getReference();
    if(reference == null)
    {
        return;
    }
    final PsiElement element = reference.resolve();
    if(element != null)
    {
        return;
    }
    final int textOffset = value.getTextOffset();
    if(textOffset == value.getTextRange().getEndOffset())
    {
        return;
    }
    final PsiDocTagValue valueElement = tag.getValueElement();
    if(valueElement == null)
    {
        return;
    }

    final CharSequence paramName = value.getContainingFile().getViewProvider().getContents().subSequence(textOffset,value.getTextRange().getEndOffset());
    final String params = "<code>" + paramName + "</code>";
    final List<LocalQuickFix> fixes = new ArrayList<LocalQuickFix>();
    if(onTheFly && "param".equals(tagName))
    {
        final PsiDocCommentOwner commentOwner = PsiTreeUtil.getParentOfType(tag,PsiDocCommentOwner.class);
        if(commentOwner instanceof PsiMethod)
        {
            final PsiMethod method = (PsiMethod) commentOwner;
            final PsiParameter[] parameters = method.getParameterList().getParameters();
            final PsiDocTag[] tags = tag.getContainingComment().getTags();
            final Set<String> unboundParams = new HashSet<String>();
            for(PsiParameter parameter : parameters)
            {
                if(!JavaDocLocalinspection.isFound(tags,parameter))
                {
                    unboundParams.add(parameter.getName());
                }
            }
            if(!unboundParams.isEmpty())
            {
                fixes.add(new RenameReferenceQuickFix(unboundParams));
            }
        }
    }
    fixes.add(new RemoveTagFix(tagName,paramName));

    problems.add(inspectionManager.createProblemDescriptor(valueElement,reference.getRangeInElement(),cannotResolveSymbolMessage(params),ProblemHighlightType.LIKE_UNKNowN_SYMBOL,fixes.toArray(new LocalQuickFix[fixes.size()])));
}
项目:consulo-java    文件:JavaDocLocalinspection.java   
@Nullable
private ArrayList<ProblemDescriptor> getTagValuesProblems(PsiDocCommentOwner context,PsiDocTag[] tags,inspectionManager inspectionManager,boolean isOnTheFly) {
  final ArrayList<ProblemDescriptor> problems = new ArrayList<ProblemDescriptor>(2);
  nextTag:
  for (PsiDocTag tag : tags) {
    final JavadocManager manager = JavadocManager.SERVICE.getInstance(tag.getProject());
    String tagName = tag.getName();
    JavadocTagInfo tagInfo = manager.getTagInfo(tagName);

    if (tagInfo == null || !tagInfo.isValidInContext(context)) {
      if (checkTagInfo(inspectionManager,tagInfo,tag,problems)) continue nextTag;
    }

    PsiDocTagValue value = tag.getValueElement();
    final JavadocTagInfo info = manager.getTagInfo(tagName);
    if (info != null && !info.isValidInContext(context)) continue;
    String message = info == null ? null : info.checkTagValue(value);

    final PsiReference reference = value != null ? value.getReference() : null;
    if (message == null && reference != null) {
      PsiElement element = reference.resolve();
      if (element == null) {
        final int textOffset = value.getTextOffset();

        if (textOffset == value.getTextRange().getEndOffset()) {
          problems.add(inspectionManager.createProblemDescriptor(tag,inspectionsBundle.message("inspection.javadoc.problem.name.expected"),true));
        }
      }
    }

    if (message != null) {
      final PsiDocTagValue valueElement = tag.getValueElement();
      if (valueElement == null){
        problems.add(inspectionManager.createProblemDescriptor(tag,inspectionsBundle.message("inspection.javadoc.method.problem.missing.tag.description","<code>" + tag.getName() + "</code>"),true));
      } else {
        problems.add(createDescriptor(valueElement,isOnTheFly));
      }
    }
    checkInlineTags(inspectionManager,tag.getDataElements(),isOnTheFly);
  }

  return problems.isEmpty() ? null : problems;
}

Domino Agent使用/ jvm / lib / ext中的第三方jar挣扎于Java安全性

Domino Agent使用/ jvm / lib / ext中的第三方jar挣扎于Java安全性

我遇到了Java安全问题。我有一个使用pdfbox-1.7.1.jar解密我知道密码的PDF的代理。该jar已放置在服务器和我的客户机上的/ jvm /
lib / ext中,这使我对堆栈跟踪有了一点点的了解:

java.lang.SecurityExceptionat java.lang.SecurityManager.checkPermission(SecurityManager.java:582)at COM.ibm.JEmpower.applet.AppletSecurity.checkSecurityPermission(AppletSecurity.java:1332)at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1613)at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)at java.lang.SecurityManager.checkSecurityAccess(SecurityManager.java:1725)at java.security.Security.insertProviderAt(Security.java:190)at java.security.Security.addProvider(Security.java:210)at org.apache.pdfbox.pdmodel.encryption.SecurityHandlersManager.getInstance(SecurityHandlersManager.java:146)at org.apache.pdfbox.pdmodel.PDDocument.openProtection(PDDocument.java:1365)at org.apache.pdfbox.pdmodel.PDDocument.decrypt(PDDocument.java:798)at com.magerman.hremail.prep1docc.PDFDecryptor.decrypt(Unknown Source)at com.magerman.hremail.prep1docc.MetaAttachment.decrypt(Unknown Source)at com.magerman.hremail.prep1docc.MetaDocContainingAttachments.removePasswordOfPDFAttachments(Unknown Source)at com.magerman.hremail.prep1docc.EPDFPreparerFactory.generateAttachmentsTriggerDocs(Unknown Source)at com.magerman.hremail.prep1docc.EPDFPreparerFactory.run(Unknown Source)at com.magerman.hremail.prep1docc.BaseClass.NotesMain(Unknown Source)at lotus.domino.AgentBase.runNotes(Unknown Source)at lotus.domino.NotesThread.run(Unknown Source)

客户端和服务器都使用8.5.3。代理安全级别设置为3。将jar放入代理本身无济于事。代理的签名者是服务器上的完全管理员。安全异常似乎指向“
insertProviderAt”

这是我尝试的:

推杆

grant {permission java.security.AllPermission;}

解决了我的问题,但我永远都无法摆脱鹰眼的管理员。

我试图缩小仅数据库的权限范围,但此处的文档:http
:
//docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html并未真正告诉我如何输入注释数据库。

我在这里查看了Stephan Wissel关于Xpages
Java安全性的文章:http :
//www.wissel.net/blog/d6plinks/SHWL-8JYAT5,并将以下内容插入了我的/jvm/lib/security/java.policy文件中:

grant codeBase "xspnsf://server:0/development/hre-mail/hre-mail2_0/hre-mail_(2_0)_dev.nsf/-" { permission java.security.AllPermission;};

但是那也不起作用,因为我的codeBase语法对nsf数据库无效,而对网页无效。

我还试图将Permission减少到真正需要的权限,并在此处查看文档:http
:
//docs.oracle.com/javase/1.4.2/docs/guide/security/permissions.html

暗示我必须做类似的事情

java.security.SecurityPermission "insertProvider.{name}"

但我不知道{name}应该是什么。

我还在http://lekkimworld.com/2013/06/20/java_in_notes_domino_explained_on_java_security_and_how_it_relates_to_notes_domino.html上阅读了米克尔的文章

但是我的大脑在页面中间炸了一下。特别是,我不确定如何实际实现此方法。你能握住我的手,然后引导我走吗?

我正在假设,只要我将新的jars放在/ jvm / lib / ext中,我所要做的就是

tell http restart

重新加载JVM?我假设Domino对Xpage,Agent和HTTP Task使用单个JVM,这是正确的。

另外,我是否需要重新启动服务器才能使java.policy中的任何新策略生效?

有任何想法吗?

答案1

小编典典

感谢Richard,Simon,Mark Myers和giulio提出的问题。

我终于得到全面理解的Mikkel的文章(通过读取它 确实 慢)上:

http://lekkimworld.com/2013/06/20/java_in_notes_domino_explained_on_java_security_and_how_it_relates_to_notes_domino.html

解决方案比我想象的要容易,我对反射示例感到困惑。

比修改java.policy文件(我没有管理,顺便说一句),这是一种更为优雅的方法。

我通过添加新的方法dopriviledgeddecrypt()来修改正在创建麻烦的类,该类正在调用其crypto()方法,该方法是引发麻烦的方法的狡猾包装器。然后,我将所有调用者都修改为PDFDecryptor.decrypt(),以便他们调用PDFDecryptor.dopriviledgeddecrypt()。最后一步涉及将整个类导出到jar文件,然后将其放置在您正在开发的计算机上(在客户端中)和将运行此代码的所有服务器上的\
jvm \ lib \ ext文件夹中。

我也无法确定是否存在用于修改java.policy文件的语法,以使其仅影响单个Notes数据库。(更新:我现在知道这是不可能的)

package com.magerman.hremail.prep1docc;public class PDFDecryptor {/** * Instantiates a new pDF decryptor. *  * @param inputFile *            the input file * @param inputPassword *            the input password */public PDFDecryptor(final File inputFile, final String inputPassword) {originalFile = inputFile;password = inputPassword;}/** * Decrypt. Given an inputted PDF File, will try to remove the security of * the PDF and save in-place. Done after the attachments have been extracted */public final void decrypt() {// naughty code here}public final void doproviledgeddecrypt() throws Exception {AccessController.doPrivileged(new PrivilegedExceptionAction() {    public Object run() throws Exception {    PDFDecryptor.this.decrypt();    return null;    }});}}

ibm-domino – Domino Admin:如何从Domino控制台或数据库中查看匿名http会话列表?

ibm-domino – Domino Admin:如何从Domino控制台或数据库中查看匿名http会话列表?

告诉http show用户 – 将向我们显示登录用户,但我们如何才能看到网站上的匿名用户列表以及他们的IP地址,以了解谁在浏览网站.

解决方法

没有匿名用户的实时视图.但是你可以激活http记录到domlog.nsf或文件系统.您可以从这些日志文件中获取ip列表.

今天关于如何从Domino Java代理计划Xagent?java 代理实现的分享就到这里,希望大家有所收获,若想了解更多关于ajax – Javascript:如何用Jasmine监视superagent?、com.intellij.psi.javadoc.JavadocManager的实例源码、Domino Agent使用/ jvm / lib / ext中的第三方jar挣扎于Java安全性、ibm-domino – Domino Admin:如何从Domino控制台或数据库中查看匿名http会话列表?等相关知识,可以在本站进行查询。

本文标签: