* remove activator class, not needed.
* remove use of non-official sun api from BrowserToken. * change bundle version to 1.0.0.qualifier.
This commit is contained in:
parent
456b168e9b
commit
e0f1a979f9
|
@ -34,7 +34,7 @@
|
||||||
<classpathentry kind="lib" path="WEB-INF/lib/zweb.jar" sourcepath="WEB-INF/lib/zweb-sources.jar"/>
|
<classpathentry kind="lib" path="WEB-INF/lib/zweb.jar" sourcepath="WEB-INF/lib/zweb-sources.jar"/>
|
||||||
<classpathentry kind="lib" path="WEB-INF/lib/cglib.jar"/>
|
<classpathentry kind="lib" path="WEB-INF/lib/cglib.jar"/>
|
||||||
<classpathentry kind="lib" path="WEB-INF/lib/fckez.jar"/>
|
<classpathentry kind="lib" path="WEB-INF/lib/fckez.jar"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||||
<classpathentry kind="output" path="WEB-INF/classes"/>
|
<classpathentry kind="output" path="WEB-INF/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
||||||
Bundle-ManifestVersion: 2
|
Bundle-ManifestVersion: 2
|
||||||
Bundle-Name: org.adempiere.webui
|
Bundle-Name: org.adempiere.webui
|
||||||
Bundle-SymbolicName: org.adempiere.webui;singleton:=true
|
Bundle-SymbolicName: org.adempiere.webui;singleton:=true
|
||||||
Bundle-Version: 0.0.0.2
|
Bundle-Version: 1.0.0.qualifier
|
||||||
Web-ContextPath: webui
|
Web-ContextPath: webui
|
||||||
Bundle-ClassPath: WEB-INF/classes/,
|
Bundle-ClassPath: WEB-INF/classes/,
|
||||||
WEB-INF/lib/zk.jar,
|
WEB-INF/lib/zk.jar,
|
||||||
|
@ -365,15 +365,13 @@ Export-Package: junit.extensions,
|
||||||
web.zul.img.vd,
|
web.zul.img.vd,
|
||||||
web.zul.img.wnd
|
web.zul.img.wnd
|
||||||
Eclipse-RegisterBuddy: org.adempiere.tools
|
Eclipse-RegisterBuddy: org.adempiere.tools
|
||||||
Require-Bundle: org.eclipse.osgi.services;bundle-version="3.1.100",
|
Require-Bundle: org.apache.xerces;bundle-version="2.9.0",
|
||||||
org.eclipse.core.runtime;bundle-version="3.5.0",
|
|
||||||
org.apache.xerces;bundle-version="2.9.0",
|
|
||||||
org.apache.xml.serializer;bundle-version="2.7.1",
|
org.apache.xml.serializer;bundle-version="2.7.1",
|
||||||
com.springsource.javax.servlet;bundle-version="2.5.0",
|
com.springsource.javax.servlet;bundle-version="2.5.0",
|
||||||
org.adempiere.JasperReports;bundle-version="1.0.0",
|
org.adempiere.JasperReports;bundle-version="1.0.0",
|
||||||
org.adempiere.client;bundle-version="0.0.0",
|
org.adempiere.client;bundle-version="1.0.0",
|
||||||
org.adempiere.base;bundle-version="0.0.0",
|
org.adempiere.base;bundle-version="1.0.0",
|
||||||
org.adempiere.tools;bundle-version="0.0.0",
|
org.adempiere.tools;bundle-version="1.0.0",
|
||||||
org.adempiere.JasperReportsTools;bundle-version="1.0.0"
|
org.adempiere.JasperReportsTools;bundle-version="1.0.0"
|
||||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
||||||
Eclipse-ExtensibleAPI: true
|
Eclipse-ExtensibleAPI: true
|
||||||
|
|
|
@ -1,87 +0,0 @@
|
||||||
package org.adempiere.webui;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Dictionary;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.servlet.ServletConfig;
|
|
||||||
import javax.servlet.ServletException;
|
|
||||||
|
|
||||||
import org.adempiere.webui.session.WebUIServlet;
|
|
||||||
import org.eclipse.core.runtime.Plugin;
|
|
||||||
import org.osgi.framework.BundleContext;
|
|
||||||
import org.osgi.framework.ServiceReference;
|
|
||||||
import org.osgi.service.http.HttpContext;
|
|
||||||
import org.osgi.service.http.HttpService;
|
|
||||||
import org.osgi.util.tracker.ServiceTracker;
|
|
||||||
import org.zkoss.zk.au.http.DHtmlUpdateServlet;
|
|
||||||
|
|
||||||
public class Activator extends Plugin {
|
|
||||||
|
|
||||||
private ServiceTracker httpServiceTracker;
|
|
||||||
|
|
||||||
public void start(BundleContext context) throws Exception {
|
|
||||||
System.out.println("Starting WebUI");
|
|
||||||
httpServiceTracker = new HttpServiceTracker(context);
|
|
||||||
httpServiceTracker.open();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void stop(BundleContext context) throws Exception {
|
|
||||||
System.out.println("Stopping WebUI");
|
|
||||||
httpServiceTracker.close();
|
|
||||||
httpServiceTracker = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private class HttpServiceTracker extends ServiceTracker {
|
|
||||||
private BundleContext context;
|
|
||||||
public HttpServiceTracker(BundleContext context) {
|
|
||||||
super(context, HttpService.class.getName(), null);
|
|
||||||
this.context = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object addingService(ServiceReference reference) {
|
|
||||||
HttpService httpService = (HttpService) context.getService(reference);
|
|
||||||
System.out.println("Adding zkLoader: "+httpService);
|
|
||||||
try {
|
|
||||||
// MappingServlet mapping = new MappingServlet();
|
|
||||||
|
|
||||||
Hashtable<String, String> params = new Hashtable<String, String>();
|
|
||||||
params.put("update-uri", "/zkau");
|
|
||||||
HttpContext ctx = httpService.createDefaultHttpContext();
|
|
||||||
WebUIServlet webuiServlet = new WebUIServlet();
|
|
||||||
httpService.registerServlet("/*.zul", webuiServlet, params , ctx); //$NON-NLS-1$
|
|
||||||
DelegatingServlet updateServlet = new DelegatingServlet(new DHtmlUpdateServlet()) {
|
|
||||||
private ServletConfig cfg;
|
|
||||||
@Override
|
|
||||||
public void init(ServletConfig config)
|
|
||||||
throws ServletException {
|
|
||||||
super.init(config);
|
|
||||||
cfg = config;
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public ServletConfig getServletConfig() {
|
|
||||||
return cfg;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
httpService.registerServlet("/zkau", updateServlet, params , ctx); //$NON-NLS-1$
|
|
||||||
// httpService.registerServlet("/*.zhtml", webuiServlet, params , ctx); //$NON-NLS-1$
|
|
||||||
httpService.registerResources("/", "/WebContent", ctx);
|
|
||||||
httpService.registerResources("/WEB-INF/zk.xml", "/zk.xml", ctx);
|
|
||||||
|
|
||||||
System.out.println("zkLoader added: " + httpService.toString());
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return httpService;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removedService(ServiceReference reference, Object service) {
|
|
||||||
HttpService httpService = (HttpService) service;
|
|
||||||
httpService.unregister("/"); //$NON-NLS-1$
|
|
||||||
System.out.println("zkLoader removedss: " + httpService.toString());
|
|
||||||
super.removedService(reference, service);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -19,6 +19,7 @@ import java.security.MessageDigest;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
import org.compiere.Adempiere;
|
import org.compiere.Adempiere;
|
||||||
import org.compiere.model.MSession;
|
import org.compiere.model.MSession;
|
||||||
import org.compiere.model.MSystem;
|
import org.compiere.model.MSystem;
|
||||||
|
@ -27,8 +28,6 @@ import org.compiere.util.CLogger;
|
||||||
import org.zkoss.zk.au.out.AuScript;
|
import org.zkoss.zk.au.out.AuScript;
|
||||||
import org.zkoss.zk.ui.util.Clients;
|
import org.zkoss.zk.ui.util.Clients;
|
||||||
|
|
||||||
import sun.misc.BASE64Encoder;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* class to manage browser token for auto authentication
|
* class to manage browser token for auto authentication
|
||||||
* @author hengsin
|
* @author hengsin
|
||||||
|
@ -37,9 +36,9 @@ import sun.misc.BASE64Encoder;
|
||||||
public final class BrowserToken {
|
public final class BrowserToken {
|
||||||
|
|
||||||
private final static CLogger log = CLogger.getCLogger(BrowserToken.class);
|
private final static CLogger log = CLogger.getCLogger(BrowserToken.class);
|
||||||
|
|
||||||
private BrowserToken() {}
|
private BrowserToken() {}
|
||||||
|
|
||||||
public final static String REMEMBER_ME = "Login.RememberMe";
|
public final static String REMEMBER_ME = "Login.RememberMe";
|
||||||
/**
|
/**
|
||||||
* save session and user as client side token for future auto login
|
* save session and user as client side token for future auto login
|
||||||
|
@ -47,20 +46,20 @@ public final class BrowserToken {
|
||||||
* @param user
|
* @param user
|
||||||
*/
|
*/
|
||||||
public static void save(MSession session, MUser user) {
|
public static void save(MSession session, MUser user) {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String home = getHomeToken();
|
String home = getHomeToken();
|
||||||
String hash = getPasswordHash(session, user);
|
String hash = getPasswordHash(session, user);
|
||||||
String script = "adempiere.saveUserToken('" + home + "', '" + hash + "', '" + session.getAD_Session_ID() + "');";
|
String script = "adempiere.saveUserToken('" + home + "', '" + hash + "', '" + session.getAD_Session_ID() + "');";
|
||||||
AuScript aus = new AuScript(null, script);
|
AuScript aus = new AuScript(null, script);
|
||||||
Clients.response("saveUserToken", aus);
|
Clients.response("saveUserToken", aus);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
log.log(Level.WARNING, e.getLocalizedMessage(), e);
|
log.log(Level.WARNING, e.getLocalizedMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* remove client side token for auto login
|
* remove client side token for auto login
|
||||||
*/
|
*/
|
||||||
|
@ -93,7 +92,7 @@ public final class BrowserToken {
|
||||||
log.log(Level.WARNING, e.getLocalizedMessage(), e);
|
log.log(Level.WARNING, e.getLocalizedMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* validate a stored client side token is valid
|
* validate a stored client side token is valid
|
||||||
* @param session
|
* @param session
|
||||||
|
@ -102,7 +101,7 @@ public final class BrowserToken {
|
||||||
* @return true if token is valid
|
* @return true if token is valid
|
||||||
*/
|
*/
|
||||||
public static boolean validateToken(MSession session, MUser user, String token) {
|
public static boolean validateToken(MSession session, MUser user, String token) {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String hash = getPasswordHash(session, user);
|
String hash = getPasswordHash(session, user);
|
||||||
return hash.equals(token);
|
return hash.equals(token);
|
||||||
|
@ -110,21 +109,21 @@ public final class BrowserToken {
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
log.log(Level.WARNING, e.getLocalizedMessage(), e);
|
log.log(Level.WARNING, e.getLocalizedMessage(), e);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getHomeToken() throws UnsupportedEncodingException {
|
private static String getHomeToken() throws UnsupportedEncodingException {
|
||||||
String home = Adempiere.getAdempiereHome();
|
String home = Adempiere.getAdempiereHome();
|
||||||
BASE64Encoder encoder = new BASE64Encoder();
|
Base64 encoder = new Base64();
|
||||||
home = encoder.encode(home.getBytes("UTF-8"));
|
home = new String(encoder.encode(home.getBytes("UTF-8")), "UTF-8");
|
||||||
home = URLEncoder.encode(home, "UTF-8");
|
home = URLEncoder.encode(home, "UTF-8");
|
||||||
return home;
|
return home;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getPasswordHash(MSession session, MUser user) throws UnsupportedEncodingException, NoSuchAlgorithmException {
|
private static String getPasswordHash(MSession session, MUser user) throws UnsupportedEncodingException, NoSuchAlgorithmException {
|
||||||
MessageDigest digest = MessageDigest.getInstance("SHA-512");
|
MessageDigest digest = MessageDigest.getInstance("SHA-512");
|
||||||
BASE64Encoder encoder = new BASE64Encoder();
|
Base64 encoder = new Base64();
|
||||||
digest.reset();
|
digest.reset();
|
||||||
digest.update(session.getWebSession().getBytes("UTF-8"));
|
digest.update(session.getWebSession().getBytes("UTF-8"));
|
||||||
String password = null;
|
String password = null;
|
||||||
|
@ -133,9 +132,9 @@ public final class BrowserToken {
|
||||||
else
|
else
|
||||||
password = new String("");
|
password = new String("");
|
||||||
byte[] input = digest.digest(password.getBytes("UTF-8"));
|
byte[] input = digest.digest(password.getBytes("UTF-8"));
|
||||||
String hash = encoder.encode(input);
|
String hash = new String(encoder.encode(input), "UTF-8");
|
||||||
hash = URLEncoder.encode(hash, "UTF-8");
|
hash = URLEncoder.encode(hash, "UTF-8");
|
||||||
|
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
source.. = WEB-INF/src/
|
||||||
|
output.. = WEB-INF/classes/
|
||||||
bin.includes = META-INF/,\
|
bin.includes = META-INF/,\
|
||||||
WEB-INF/,\
|
WEB-INF/,\
|
||||||
css/,\
|
css/,\
|
||||||
|
|
Loading…
Reference in New Issue