氟塑料离心泵www.buybeng.com

jquery教程http://www.software8.co/wzjs/jquery/

Liferay Plugin SDK开发与Ext开发的选择

Liferay有两种服务:

1)internal services
即Liferay核心服务,比如portal-impl.jar

 

2)external services
即Portal的API,比如portal-kernel.jar以及portal-service.jar

 

Liferay的internal服务更新频繁,升级Liferay版本时尤其要注意;而Liferay的external服务则相当稳定。

Ext开发可以同时使用internal服务和external服务。且Liferay的最新趋势是Ext开发将不再支持Portlets开发和themes开发(Struts Portlet例外)。

Ext是一个完整的开发环境,易于按需求定制Liferay Portal。集成了多个Liferay工具,可用于开发Portlet和
Portal,比如:JSP Portlet、Struts Portlet甚至是ServiceBuilder。

而Plugin SDK则用于完成:主题、布局模板、Portlet、hooks、web应用等。故对于Liferay初学者而言,Liferay Plugin SDK开发是更好的选择。


Plugin SDK是一个相对简单的Liferay开发环境,它完全隔离了Liferay Portal的internal服务,只使用了external服务。这样就强制了新开发的Portlet只使用了portal-kernel.jar和portal-service.jar,而与portal-impl.jar无关,在升级版本时相当有利。

Plugin SDK与Ext两种开发环境均可利用任何Liferay支持的应用程序框架,例如:JSF、JSP、Ruby、Lazzlo、PHP、JSON、Hibernate、DAO、Spring MVC、Struts、Tapestry、Wicket、Python、LAR(Liferay Archive)等。


下载liferay-plugins-sdk-5.2.3.zip,不到10MB,建立Java项目,导入,项目结构图如下:

项目结构图 

一切皆很简单!

 

posted on 2012-10-10 10:51 你爸是李刚 阅读(1566) 评论(7)  编辑  收藏

评论

# re: Liferay Plugin SDK开发与Ext开发的选择 2012-10-10 13:59 grubbbythn

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@page import="java.util.*"%>
<%@page import="ext.huawei.login.security.LoginUtil"%>
<%@page import="ext.huawei.login.security.LoginInfoHelper"%>
<%@page import="ext.huawei.login.security.SecurityUtil"%>
<%@page import="ext.huawei.tpdm.common.ObjectURL"%>
<%@page import="wt.org.WTUser"%>

<%
String cb = null;
// 是否跨域访问
boolean scriptTag = false;

try{
// 将从TPDM端传过来的xml参数转换成map
Map<String, Map<String, String>> resultMap = LoginUtil.loginVerify(request, response);

// 头部信息(如:验证消息、用户名、密码、请求类型、验证消息...)
Map<String, String> headerMap = resultMap.get(LoginUtil.HEADER_MAP_KEY);

// 参数列表信息
Map<String, String> paramMap = resultMap.get(LoginUtil.PARAM_MAP_KEY);

String verifyCode = headerMap.get(LoginUtil.VERIFYCODE_MAP_KEY);
String requestType = headerMap.get(LoginUtil.REQUEST_TYPE_MAP_KEY);

cb = request.getParameter("callback"); //?
if (cb != null) {
scriptTag = true;
}

/* 以下代码是根据verifyCode的值来做具体的处理(后台重新获取返回结果并输出、直接跳转、返回错误信息) */

// 100 表示验证通过
if("100".equals(verifyCode)) {
// 验证通过后,判断请求类型是否为“固定链接”。
// 若是,则用js代码控制跳转
// if(requestType.contains(LoginInfoHelper.FixedURL)) {
String username = headerMap.get(LoginUtil.USERNAME_MAP_KEY);
String password = headerMap.get(LoginUtil.PASSWORD_MAP_KEY);
String urlTarget = paramMap.get(LoginUtil.URLTARGET_MAP_KEY);

%>
<script>
var xhr;
var i=1;
var flag;

/* 直接跳转页面 */
function login(username,password,url){
if(window.ActiveXObject){//判断浏览器是否支持ActiveX控件
xhr = new ActiveXObject("Microsoft.XMLHTTP"); //IE7以前的版本创建XMLHttpRequest对象
}else {
xhr = new XMLHttpRequest();//IE7及非IE浏览器中可以利用var xml=new XMLHttpRequest()创建XMLHttpRequest对象
}
xhr.open("POST", "<%=request.getContextPath()%>/navigator/loginVerify.html", false, username, password);
xhr.onreadystatechange=handleLoginBeforeChange;
xhr.send(null);
window.location.replace(url);
}

function handleLoginBeforeChange(){
/* write your code here */
}
</script>
<script>login("<%=username%>","<%=password%>","<%=urlTarget%>");</script>
<%
// 如果不是“固定链接”的请求类型,则须从后台重新获取数据当做返回结果
/* } else {
// 若是跨域访问
if (scriptTag) {
response.setContentType("text/javascript");
out.write(cb + "(");
} else {
response.setContentType("application/x-json");
}
String result = LoginUtil.getSourceString(request, response, resultMap);
out.println(result);
if (scriptTag) {
out.write(");");
}
}
*/
}else {
// 100 以外的值都表示不通过
// 若是跨域访问
if (scriptTag) {
response.setContentType("text/javascript");
out.write(cb + "(");
} else {
response.setContentType("application/x-json");
}
out.println("{\"err_msg\":\"" + headerMap.get(LoginUtil.RESULT_MESSAGE_MAP_KEY) + "\"}");
if (scriptTag) {
out.write(");");
}
}

}catch(Exception e){
e.printStackTrace();
// 异常情况下,将异常信息返回给调用端
if (scriptTag) {
response.setContentType("text/javascript");
out.write(cb + "(");
} else {
response.setContentType("application/x-json");
}
out.println("{\"err_msg\":\"" + e.getMessage() + "\"}");
if (scriptTag) {
out.write(");");
}
}
%>






  回复  更多评论   

# re: Liferay Plugin SDK开发与Ext开发的选择 2012-10-10 14:05 grubbbythn

public static int getVerifyCode(HttpServletRequest request,
HttpServletResponse response, String username, String password) {

System.out.println(">>> LoginUtil.getVerifyCode方法开始...");

// 默认为“异常原因”
int verifyCode = 0;

// 用户名或密码为空的时候,直接返回
if(!LoginInfoHelper.isParamValid(username, password)) {
verifyCode = -300;
System.out.println("用户名或密码参数为空.");
System.out.println(">>> LoginUtil.getVerifyCode方法结束...");
return verifyCode;
}

try {
/* 授权代码 */
wt.httpgw.WTContextBean wtcontext = new wt.httpgw.WTContextBean();
wtcontext.setRequest(request);
NmContextBean nmcontext = new NmContextBean();
try {
request.setCharacterEncoding("UTF-8");
nmcontext.setRequest(request);
nmcontext.setResponse(response);
nmcontext.adjustContext(request);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (WTException e) {
e.printStackTrace();
}
wt.httpgw.GatewayAuthenticator auth = new wt.httpgw.GatewayAuthenticator();
wt.org.WTPrincipal admin = null;
try {
admin = wt.session.SessionHelper.manager.getAdministrator();
} catch (WTException e2) {
e2.printStackTrace();
}
auth.setRemoteUser(admin.getName());
wtcontext.setAuthentication(auth);
/* 授权代码 */

if (LoginInfoHelper.isParamValid(username, password)) {
boolean blogin = false;
try {
blogin = LoginUtil.checkUsernamePassword(username, password);//通过html去认证用户名和密码
System.out.println("后台blogin: " + blogin);
} catch (Exception e1) {
e1.printStackTrace();
}
WTUser user = (WTUser) SecurityUtil.findUser(username);//获取username对应的WTUser
if (blogin && user != null) {
// request.setAttribute("Authorization", str_verify);
HttpSession session = request.getSession();
session.setAttribute("login_uid", user);//将WTUser存入session
String state = null;
try {
state = LoginUtil.checkUserStatus(user, username);
System.out.println("后台state: " + state);
} catch (Exception e) {
e.printStackTrace();
}
if (state != null && state.startsWith("STATE_ERROR")) {
if (state.equals(STATE_ERROR_USER_INVALID)) {
// 用户已失效
verifyCode = -200;
}
} else {
// 登录成功
verifyCode = 100;
}
} else {
// 用户名或密码错误
verifyCode = -100;
}
}
} catch (Exception e) {
e.printStackTrace();
// 若有异常情况,则设置为0
verifyCode = 0;
}

System.out.println(">>> LoginUtil.getVerifyCode方法结束...");
return verifyCode;
}  回复  更多评论   

# re: Liferay Plugin SDK开发与Ext开发的选择 2012-10-10 14:06 grubbbythn

public static Map<String, Map<String, String>> loginVerify(
HttpServletRequest request, HttpServletResponse response) {

System.out.println(">>> LoginUtil.loginVerify方法开始...");
// 要返回的map
Map<String, Map<String, String>> resultMap = new HashMap<String, Map<String, String>>();

// 构造空的头部信息map
Map<String, String> headerMap = new HashMap<String, String>();

// 构造空的参数列表信息map
Map<String, String> paramMap = new HashMap<String, String>();

// 头部信息里的登录结果消息
String resultMsg = "";
try {
// 取得从TPDM端传过来的参数xml
String xml = request.getParameter(PARAM_NAME); //文本框的名称,
System.out.println("传入的xml参数的值为:");
System.out.println("===========");
System.out.println(xml);
System.out.println("===========");


// 若参数为空,则立即返回
if (xml == null || "".equals(xml)) {
resultMsg = "参数xml为null或为空字符串!";
headerMap.put(VERIFYCODE_MAP_KEY, "0");
headerMap.put(RESULT_MESSAGE_MAP_KEY, resultMsg);
resultMap.put(HEADER_MAP_KEY, headerMap);
resultMap.put(PARAM_MAP_KEY, paramMap);
return resultMap;

// 若xml值不为null或空
} else {
// 将xml格式的字符串转换成键值对格式的map
Document xmlDoc = CommonXMLUtil.string2doc(xml);
resultMap = xmlToMap(xmlDoc);

System.out.println("xml参数转换后的map为:");
System.out.println("===========");
System.out.println(resultMap);
System.out.println("===========");

headerMap = resultMap.get(HEADER_MAP_KEY);
String username = replaceNullOfDef(headerMap.get(USERNAME_MAP_KEY), "");
String password = headerMap.get(PASSWORD_MAP_KEY);

//modified by zhangyumei,2012/10/9,在此处拼接URL
paramMap = resultMap.get(LoginUtil.PARAM_MAP_KEY);
String requestType = headerMap.get("RequestType");
if(requestType.equalsIgnoreCase(PART_DETAIL_INFO)){
String partNumber = paramMap.get("partNumber");
String urlTarget = ObjectURL.getPartInfoUrl(partNumber);
paramMap.put(URLTARGET_MAP_KEY, urlTarget);
}

//modified by zhangyumei,2012/10/9
int verifyCode = 0;
// 先判断是否已经登录过了
if (hasLogin(request, username)) {
verifyCode = 100;
resultMsg = "用户已经登录过了";
} else {
// 若尚未登录,则需重新验证

// 取得验证登录的code
verifyCode = getVerifyCode(request, response, username, password);
switch (verifyCode) {
case -300:
resultMsg = "用户名或密码为空";
break;
case -200:
resultMsg = "用户已失效";
break;
case -100:
resultMsg = "用户名或密码错误";
break;
case 100:
resultMsg = "用户首次登录成功";
break;
case 0:
resultMsg = "异常原因";
break;
default:
resultMsg = "其它原因";
break;
}
}
System.out.println("VerifyCode:" + verifyCode + ", ResultMsg:" + resultMsg);
headerMap.put(VERIFYCODE_MAP_KEY, String.valueOf(verifyCode));
headerMap.put(RESULT_MESSAGE_MAP_KEY, resultMsg);

}
} catch (Exception e) {
e.printStackTrace();
System.out.println("发现异常:异常信息为:");
System.out.println("===========");
e.printStackTrace();
System.out.println("===========");

// 异常情况下的处理
headerMap.clear();
paramMap.clear();
resultMap.clear();
headerMap.put(VERIFYCODE_MAP_KEY, "0");
headerMap.put(RESULT_MESSAGE_MAP_KEY, "其它异常原因");
resultMap.put(HEADER_MAP_KEY, headerMap);
resultMap.put(PARAM_MAP_KEY, paramMap);
} finally {
System.out.println("处理后的map为:");
System.out.println("===========");
System.out.println(resultMap);
System.out.println("===========");
System.out.println(">>> LoginUtil.loginVerify方法结束...");
}

// 将结果map返回
return resultMap;
}  回复  更多评论   

# re: Liferay Plugin SDK开发与Ext开发的选择 2012-10-10 14:08 grubbbythn

static {
try {
urlFactory = new URLFactory();
WTPROPERTIES = WTProperties.getLocalProperties();
} catch (Exception e) {
e.printStackTrace();
}
}

private static boolean checkUsernamePassword(String username, String password)
throws Exception {
try {
URL url = null;
if (WTPROPERTIES.getProperty("apache.host") != null
&& WTPROPERTIES.getProperty("apache.host").startsWith(
"https")) {
// add by luoquanhua for enforing trust ssl begin
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new TM();
trustAllCerts[0] = tm;
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
.getInstance("SSL");
sc.init(null, trustAllCerts, null);
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
.getSocketFactory());
//
System.setProperty("java.protocol.handler.pkgs",
"javax.net.ssl");
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return urlHostName.equals(session.getPeerHost());
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);

// add by luoquanhua for enforing trust ssl end
// WTPROPERTIES.getProperty("apache.host")=https://10.82.113.16:8006/
url = new URL(WTPROPERTIES.getProperty("apache.host")
+ "Windchill/ext/xxx/login/loginVerify.html");
} else {
url = new URL(urlFactory
.getHREF("/ext/xxx/login/loginVerify.html"));
}
URLConnection uc = url.openConnection();
String authorization = SecurityUtil.getAuthorization(username, password);
uc.setRequestProperty("Content-Type", "application/octet-stream");
uc.setRequestProperty("Cache-Control", "no-cache");
uc.addRequestProperty("Authorization", authorization);
uc.setDoOutput(true);
uc.setDoInput(true);
uc.setUseCaches(false);
uc.setDefaultUseCaches(false);
uc.setAllowUserInteraction(true);
uc.connect();
InputStream in = uc.getInputStream();
in = new BufferedInputStream(in);
Reader r = new InputStreamReader(in);
BufferedReader br = new BufferedReader(r);
String line = null;
boolean result = false;
while ((line = br.readLine()) != null) {
if (VERBOSE) {
System.out.println("line===>" + line);
}
if (line.indexOf("OK") > -1)
result = true;
}
br.close();
if (VERBOSE) {
System.out.println("the user '" + username + "':" + result);
}
return result;
} catch (Exception e) {
System.err.println("Login Error Record: " + e.getMessage());
e.printStackTrace();
}
return false;
}  回复  更多评论   

# re: Liferay Plugin SDK开发与Ext开发的选择 2012-10-10 14:12 grubbbythn

public static boolean hasLogin(HttpServletRequest request, String username) {
boolean hasLogin = false;
HttpSession session = request.getSession();
WTUser user = (WTUser) session.getAttribute("login_uid");
System.out.println("后台user: " + user);
// 若WTUser对象不为空且用户名与传入的用户名一致,则认为该用户已经登录过
if (username != null && user != null
&& user.getAuthenticationName().equalsIgnoreCase(username.trim())) {
hasLogin = true;
System.out.println(username + "已经登录过了.");
}
return hasLogin;
}

public static void loginSystem(String userName, String password) {
RemoteMethodServer rms = RemoteMethodServer.getDefault();
rms.setUserName(userName);
rms.setPassword(password);
}
public static String replaceNullOfDef(String val, String def) {
return val != null ? val : def;
}  回复  更多评论   

# re: Liferay Plugin SDK开发与Ext开发的选择 2012-10-10 14:14 grubbbythn

public static Map<String, Map<String, String>> xmlToMap(Document xmlDoc) {


Map<String, Map<String, String>> resultMap = new HashMap<String, Map<String, String>>();


Map<String, String> headerMap = new HashMap<String, String>();


Map<String, String> paramMap = new HashMap<String, String>();

if (xmlDoc != null) {
try {

Element headerEle = (Element) XPath.selectSingleNode(xmlDoc,
"//Root/RequestType");
if (headerEle != null) {
String requestType = headerEle.getTextTrim();
headerMap.put(headerEle.getName(), replaceNullOfDef(
requestType, ""));
}
headerEle = (Element) XPath.selectSingleNode(xmlDoc,
"//Root/Verify");
if (headerEle != null) {
String verify = headerEle.getTextTrim();
String username = SecurityUtil
.DecodeBase64String(verify, 1);
String passowrd = SecurityUtil
.DecodeBase64String(verify, 0);
// map(id -> text)
headerMap.put(USERNAME_MAP_KEY, username);
headerMap.put(PASSWORD_MAP_KEY, passowrd);
headerMap.put(VERIFY_MAP_KEY, verify);
}


List paramsList = XPath.selectNodes(xmlDoc,
"//Root/Params/Param");
for (Object paramObj : paramsList) {
if (paramObj instanceof Element) {
Element paramEle = (Element) paramObj;
String paramID = paramEle.getAttributeValue("id", "");
String paramText = paramEle.getTextTrim();
if (!"".equals(paramID)) {
paramMap.put(paramID, paramText);
}
}
}

} catch (JDOMException e) {
System.out.println("xml解析出错.");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
resultMap.put(HEADER_MAP_KEY, headerMap);
resultMap.put(PARAM_MAP_KEY, paramMap);
}
}
return resultMap;
}  回复  更多评论   

# re: Liferay Plugin SDK开发与Ext开发的选择 2012-10-10 14:16 grubbbythn

public static String getSourceString(HttpServletRequest request,
HttpServletResponse response, Map<String, Map<String, String>> map)
throws Exception {

System.out.println(">>> LoginUtil.getSourceString方法开始...");

StringBuffer result = new StringBuffer();
String charset = "UTF-8";
try {

wt.httpgw.WTContextBean wtcontext = new wt.httpgw.WTContextBean();
wtcontext.setRequest(request);
NmContextBean nmcontext = new NmContextBean();
try {
request.setCharacterEncoding("UTF-8");
nmcontext.setRequest(request);
nmcontext.setResponse(response);
nmcontext.adjustContext(request);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (WTException e) {
e.printStackTrace();
}
wt.httpgw.GatewayAuthenticator auth = new wt.httpgw.GatewayAuthenticator();
wt.org.WTPrincipal admin = null;
try {
admin = wt.session.SessionHelper.manager.getAdministrator();
} catch (WTException e2) {
e2.printStackTrace();
}
auth.setRemoteUser(admin.getName());
wtcontext.setAuthentication(auth);

Map<String, String> headerMap = map.get(HEADER_MAP_KEY);

Map<String, String> paramMap = map.get(PARAM_MAP_KEY);

String requestType = headerMap.get(REQUEST_TYPE_MAP_KEY);
String username = headerMap.get(USERNAME_MAP_KEY);
String password = headerMap.get(PASSWORD_MAP_KEY);
String encoding = headerMap.get(VERIFY_MAP_KEY);
String urlTarget = paramMap.get(URLTARGET_MAP_KEY);


loginSystem(username, password);

URL url = new URL(urlFactory.getHREF(urlTarget));

URLConnection uc = url.openConnection();
// uc.setRequestProperty("Content-Type", "application/json");
uc.setRequestProperty("Cache-Control", "no-cache");
uc.addRequestProperty("Authorization", encoding);
// uc.setRequestMethod("GET");
uc.setDoOutput(true);
uc.setDoInput(true);
uc.setUseCaches(false);
uc.setDefaultUseCaches(false);
uc.setAllowUserInteraction(true);
PrintWriter out = new PrintWriter(uc.getOutputStream());

Set<Map.Entry<String, String>> paramSet = paramMap.entrySet();


// 是不是第一个参数
boolean isFirstParam = true;
for(Map.Entry<String, String> param : paramSet) {

// 若不是第一个参数需要再后面加入一个&符号
if(!isFirstParam) {
out.print("&");
}
String key = param.getKey();
String value = param.getValue();
out.print(key + "=" + URLEncoder.encode(value, "UTF-8"));
isFirstParam = false;
}

out.close();
uc.connect();

InputStream in = uc.getInputStream();
Scanner scanner = null;

scanner = new Scanner(in, charset);

while(scanner.hasNextLine()) {
result.append(scanner.nextLine());
result.append("\n");
}
scanner.close();

} catch (Exception e) {

e.printStackTrace();
}
return result.toString();
}  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿

随笔档案

文章档案

技术网站

行业网站

搜索

最新评论

阅读排行榜

评论排行榜

站长网 氟塑料离心泵 注塑机 液晶广告机