在本文中,我们将详细介绍如何从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 代理实现)
- 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 代理实现)
通过从预定的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?
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的实例源码
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)); } }
@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); }
@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); }
@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); }
@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()]); }
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)); } } } } } } } } }
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()]))); }
@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安全性
我遇到了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会话列表?
解决方法
今天关于如何从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会话列表?等相关知识,可以在本站进行查询。
本文标签: