📄 lifeblogservices.java
字号:
/**
*
*/
package com.xpn.xwiki.atom.lifeblog;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.atom.WSSEHttpHeader;
import com.xpn.xwiki.atom.XWikiHelper;
/**
* @author Luis Arias <luis.arias@xwiki.com>
*
*/
public class LifeblogServices {
private String userName;
private static final long NONCE_TIMEOUT = 1200000L;
private XWikiHelper xwikiHelper;
public LifeblogServices(XWikiContext context) {
xwikiHelper = new XWikiHelper(context);
}
public boolean isAuthenticated() throws XWikiException, IOException {
return isAuthenticated(xwikiHelper.getWSSEHeader());
}
public boolean isAuthenticated(String header) throws XWikiException, IOException {
if (header != null) {
// Interpret WSSE Header and Authenticate User
WSSEHttpHeader wsseHeader = WSSEHttpHeader.parseHttpHeader(header);
if (nonceIsNotTooOld(wsseHeader.parseCreated())
&& !nonceAlreadyUsedByUser(wsseHeader.getNonce())) {
userName = "XWiki." + wsseHeader.getUserName();
String authenticationToken = xwikiHelper.getAtomAuthenticationToken(userName);
if (authenticationToken !=null ) {
if (wsseHeader.isAuthenticated(authenticationToken)) {
return true;
}
}
}
}
return false;
}
public void listUserBlogs() throws IOException, XWikiException {
List userBlogs = xwikiHelper.listUserBlogs(userName);
HttpServletResponse response = xwikiHelper.getResponse();
response.setContentType("application/x.atom+xml");
PrintWriter writer = new PrintWriter(response.getOutputStream());
writer.write(getAtomListUserBlogs(userBlogs));
}
public String getAtomListUserBlogs(List userBlogs) {
StringWriter stringWriter = new StringWriter();
PrintWriter writer = new PrintWriter(stringWriter);
writer.println("<?xml version=\"1.0\"?>");
writer.println("<feed xmlns=\"http://purl.org/atom/ns#\">");
Iterator it = userBlogs.iterator();
while (it.hasNext()) {
UserBlog userBlog = (UserBlog)it.next();
writer.print("<link type=\"application/atom+xml\" rel=\"service.post\" href=\"");
writer.print(userBlog.getPostHref());
writer.print("\" title=\"");
writer.print(userBlog.getTitle());
writer.println("\"/>");
writer.print("<link type=\"application/atom+xml\" rel=\"service.feed\" href=\"");
writer.print(userBlog.getFeedHref());
writer.print("\" title=\"");
writer.print(userBlog.getTitle());
writer.println("\"/>");
writer.print("<link type=\"application/atom+xml\" rel=\"service.alternate\" href=\"");
writer.print(userBlog.getAlternateHref());
writer.print("\" title=\"");
writer.print(userBlog.getTitle());
writer.println("\"/>");
}
writer.print("</feed>");
writer.flush();
return stringWriter.toString();
}
private boolean nonceAlreadyUsedByUser(String nonce) {
boolean alreadyUsed = false;
HttpSession session = xwikiHelper.getSession();
String lastNonce = (String) session.getAttribute("lastNonce");
if (lastNonce != null) {
alreadyUsed = lastNonce.equals(nonce);
}
if (!alreadyUsed) {
session.setAttribute("lastNonce", nonce);
}
return alreadyUsed;
}
private boolean nonceIsNotTooOld(Calendar createdDate) {
return Calendar.getInstance().getTimeInMillis() - createdDate.getTimeInMillis() <= NONCE_TIMEOUT;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -