詳情參見
http://blog.csdn.net/qiaoidea/article/details/25739349 openfire插件開發(plugin
sevlet)入門 (文章末尾)
有時候在添加AuthCheckFilter.addExclude()後雖然沒有跳轉到登錄驗證了,但是若果沒有登錄過(session記錄下管理控制檯驗證),會出現空指針現象:
異常:
java.lang.NullPointerException at org.jivesoftware.openfire.admin.decorators.main_jsp._jspService(main_jsp.java:195) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:480) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:941) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.Dispatcher.include(Dispatcher.java:195) at com.opensymphony.module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java:156) at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:59) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:941) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) at org.eclipse.jetty.server.Server.handle(Server.java:349) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441) at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:919) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) at java.lang.Thread.run(Unknown Source)
而如果我們先在管理控制檯登錄一次就可以正常跳轉了,這怎麼解決呢?!
解決方案:
插件的頁面不使用openfire控制檯的頁面框架(同樣適用於NullPointException異常解決)
安裝版的openfire的話,修改/openfire/plugins/admin/webapp/WEB-INF/decorators.xml文件
源代碼版的,要修改/openfire_src/src/web/WEB-INF/decorators.xml文件
示例:
- <excludes>
- <pattern>/plugins/test/*</pattern>
- <pattern>/setup/setup-completed.jsp*</pattern>
- <pattern>/setup/setup-ldap-server_test.jsp*</pattern>
- <pattern>/setup/setup-ldap-user_test.jsp*</pattern>
- <pattern>/setup/setup-ldap-group_test.jsp*</pattern>
- <pattern>/setup/setup-clearspace-integration_test.jsp*</pattern>
- <pattern>/setup/setup-admin-settings_test.jsp*</pattern>
- <pattern>/login.jsp*</pattern>
- <pattern>/plugin-icon.jsp*</pattern>
- <pattern>/js/jscalendar/i18n.jsp*</pattern>
- </excludes>
這樣,插件popplugin目錄下的所有路徑的jsp頁面及js,css等,都能被自由的訪問了。