- 浏览: 216997 次
- 性别:
- 来自: 湖北->上海
最新评论
-
苹果超人:
我也遇到这个问题,我想在ConfigurationAction ...
杀千刀的PortletPreferences -
flago:
Liferay 的论坛设置的默认显示多少条帖子怎么设置??
liferay中vm中如何调用java类代码 -
ofdata:
遭遇此问题
杀千刀的PortletPreferences -
yaokaiwen99:
大哥求一个简单的flexigrid在liferay中应用的例 ...
Liferay异步提交 -
gaigai511225:
你好 插件环境那个url 具体怎么写 我照您的方式写了出错 ...
Liferay异步提交
1.liferay的openid的配置很简单的,先去 openid提供商注册一个自已的openid如果已经有就不用了,现在yahoo,google都提供openid,你也可以在www.myopenid.com上面去注册一个。
2. portal.properties文件open.id.auth.enabled=true,liferay5.0默认就是true,然后用你的openid登陆lliferay。
3.liferay在发送验证之前,以你的openid为ScreenName去查找用户,如果没有这个用户,会向提供商请求first name,last name,mail三个参数。
4.接收验证成功,如果三个参数都能获取,liferay会自动为你注册一个帐户,如果有一个参数为空就跳往新增用户页面。
下面是相关代码的解释:
public static void sendOpenIdRequest( ThemeDisplay themeDisplay, HttpServletRequest req, HttpServletResponse res, String openId) throws Exception { if (!OpenIdUtil.isEnabled(themeDisplay.getCompanyId())) { return; } HttpSession ses = req.getSession(); String returnURL = PortalUtil.getPortalURL(req) + themeDisplay.getPathMain() + "/portal/open_id_response"; //创建消费者对象,它将向认证服务器发出认证请求 ConsumerManager manager = OpenIdUtil.getConsumerManager(); //下载OpenID提供者列表,返回结果将按照用户指定的优选顺序排列 List<DiscoveryInformation> discoveries = manager.discover(openId); //通过关联获取和OpenID提供者之间的共享密钥 DiscoveryInformation discovered = manager.associate(discoveries); //密钥放入用户session以方便后面使用 ses.setAttribute(WebKeys.OPEN_ID_DISCO, discovered); //将用户重定向到他们的OpenID提供者页面,并告诉OpenID提供者外部站点的地址 AuthRequest authReq = manager.authenticate(discovered, returnURL); String screenName = OpenIdUtil.getScreenName(openId); try { //通过openid取用户 UserLocalServiceUtil.getUserByScreenName( themeDisplay.getCompanyId(), screenName); } //没有screenName为openid的用户 catch (NoSuchUserException nsue) { //构建一个空的请求参数列表 FetchRequest fetch = FetchRequest.createFetchRequest(); //写上请求的参数(姓名和邮箱,以方便注册用) fetch.addAttribute( "email", "http://schema.openid.net/contact/email", true); fetch.addAttribute( "firstName", "http://schema.openid.net/namePerson/first", true); fetch.addAttribute( "lastName", "http://schema.openid.net/namePerson/last", true); authReq.addExtension(fetch); //构建一个空的请求参数列表(与FetchRequest什么区别暂时还不清楚) SRegRequest sregReq = SRegRequest.createFetchRequest(); sregReq.addAttribute("fullname", true); sregReq.addAttribute("email", true); authReq.addExtension(sregReq); } //发往OpenID提供者页面 res.sendRedirect(authReq.getDestinationUrl(true)); }
protected User readResponse( ThemeDisplay themeDisplay, HttpServletRequest req) throws Exception { HttpSession ses = req.getSession(); ConsumerManager manager = OpenIdUtil.getConsumerManager(); ParameterList params = new ParameterList(req.getParameterMap()); //取得session中的密钥 DiscoveryInformation discovered = (DiscoveryInformation)ses.getAttribute(WebKeys.OPEN_ID_DISCO); if (discovered == null) { return null; } StringBuffer receivingURL = req.getRequestURL(); String queryString = req.getQueryString(); if ((queryString != null) && (queryString.length() > 0)) { receivingURL.append(StringPool.QUESTION); receivingURL.append(req.getQueryString()); } //校验 VerificationResult verification = manager.verify( receivingURL.toString(), params, discovered); Identifier verified = verification.getVerifiedId(); if (verified == null) { return null; } AuthSuccess authSuccess = (AuthSuccess)verification.getAuthResponse(); String firstName = null; String lastName = null; String emailAddress = null; //获取信息 if (authSuccess.hasExtension(SRegMessage.OPENID_NS_SREG)) { MessageExtension ext = authSuccess.getExtension( SRegMessage.OPENID_NS_SREG); if (ext instanceof SRegResponse) { SRegResponse sregResp = (SRegResponse)ext; String fullName = GetterUtil.getString( sregResp.getAttributeValue("fullname")); int pos = fullName.indexOf(StringPool.SPACE); if ((pos != -1) && ((pos + 1) < fullName.length())) { firstName = fullName.substring(0, pos); lastName = fullName.substring(pos + 1); } emailAddress = sregResp.getAttributeValue("email"); } } if (authSuccess.hasExtension(AxMessage.OPENID_NS_AX)) { MessageExtension ext = authSuccess.getExtension( AxMessage.OPENID_NS_AX); if (ext instanceof FetchResponse) { FetchResponse fetchResp = (FetchResponse)ext; if (Validator.isNull(firstName)) { firstName = getFirstValue( fetchResp.getAttributeValues("firstName")); } if (Validator.isNull(lastName)) { lastName = getFirstValue( fetchResp.getAttributeValues("lastName")); } if (Validator.isNull(emailAddress)) { emailAddress = getFirstValue( fetchResp.getAttributeValues("email")); } } } String screenName = OpenIdUtil.getScreenName(authSuccess.getIdentity()); User user = null; try { //通过openid做为ScreenName试着能否查找出这个用户 user = UserLocalServiceUtil.getUserByScreenName( themeDisplay.getCompanyId(), screenName); } catch (NoSuchUserException nsue) { //如果openid提供没有firstName之类的用户信息,报错 if (Validator.isNull(firstName) || Validator.isNull(lastName) || Validator.isNull(emailAddress)) { SessionErrors.add(req, "missingOpenIdUserInformation"); _log.error( "The OpenID provider did not send the required " + "attributes to create an account"); return null; } //能取到信息就生成一个用户 user = addUser( themeDisplay.getCompanyId(), firstName, lastName, emailAddress, screenName, themeDisplay.getLocale()); } ses.setAttribute(WebKeys.OPEN_ID_LOGIN, new Long(user.getUserId())); return user; }
在网上很难找到操作openid的相关api中文帮助文档,下面是我在网上找的一段希望能对大家有所帮助
依赖方发送 SRegRequest SRegRequest sregReq = SRegRequest.createFetchRequest(); sregReq.addAttribute("fullname", true); sregReq.addAttribute("nickname", true); sregReq.addAttribute("email", true); AuthRequest req = _consumerManager.authenticate(discovered, return_to); req.addExtension(sregReq);OpenID 提供方接受 SRegRequest if (authReq.hasExtension(SRegMessage.OPENID_NS_SREG)) { MessageExtension ext = authReq.getExtension(SRegMessage.OPENID_NS_SREG) if (ext instanceof SRegRequest) { SRegRequest sregReq = (SRegRequest) ext; List required = sregReq.getAttributes(true); List optional = sregReq.getAttributes(false); // prompt the user } }OpenID 提供方发送 SRegResponse // data released by the user Map userData = new HashMap(); //userData.put("email", "user@example.com"); SRegResponse sregResp = SRegResponse.createSRegResponse(sregReq, userData); // (alternatively) manually add attribute values sregResp.addAttribute("email", "user@example.com"); authSuccess.addExtension(sregResp);依赖方接受 SRegResponse if (authSuccess.hasExtension(SRegMessage.OPENID_NS_SREG)) { MessageExtension ext = authSuccess.getExtension(SRegMessage.OPENID_NS_SREG); if (ext instanceof SRegResponse) { SRegResponse sregResp = (SRegResponse) ext; String fullName = sregResp.getAttributeValue("fullname"); String nickName = sregResp.getAttributeValue("nickname"); String email = sregResp.getAttributeValues("email"); } }
评论
2 楼
Tyler_Zhou
2008-11-24
lishaoyun 写道
补一下第四讲的视频教程嘛.我一直在等着了..
第四讲丢掉的都是一些具体的portlet的操作,其实大家摸索一下,就能知道是怎么操作的了,很简单的。
1 楼
lishaoyun
2008-11-24
补一下第四讲的视频教程嘛.我一直在等着了..
发表评论
-
JSR 286 Portlet 的新特性,第 3 部分: Portlet 过滤器和 Portlet 窗口
2010-06-01 10:24 2488在 本系列 的 第 1 部分 简要回顾了JSR 1 ... -
JSR 286 Portlet 的新特性,第 2 部分: 资源服务、事件与共享呈现参数
2010-05-31 18:42 2201在本系列的 第 1 部分 简要回顾了 J ... -
JSR 286 Portlet 的新特性,第 1 部分: Portlet 2.0 新特性介绍
2010-05-31 17:55 2379本系列文章专门针 ... -
Session share
2010-05-14 12:18 0Tomcat Server.xml <Servi ... -
Liferay集群负载均衡配置
2009-10-30 11:14 4882先介绍一下项目系统的环境, Liferay Version: ... -
Liferay 集群部署
2009-10-30 00:00 0十二点了,明天断续 -
Liferay 权限策略
2009-10-29 23:45 3094先上一张大家都很熟悉的图 这张图可以说是整 ... -
Liferay Portlet之间的通信
2009-10-29 19:12 5007从我做Liferay到现在,这个问题一直都存在着,直到最近我才 ... -
Liferay异步提交
2009-10-29 18:06 3396liferay的异步提交其实是非常简单的,他用的是json & ... -
Liferay异步刷新
2009-10-29 18:05 3171Liferay portlet异步刷新,分为两种情况。 ... -
准备开始整理半年来对lifeay新的学习成果
2009-10-29 18:04 1491有半年没有写过liferay的blog了,不过对life ... -
Ajax知识
2009-06-11 17:50 0<SCRIPT LANGUAGE=" ... -
改变Liferay Portal Context(让Liferay不在使用ROOT目录)
2009-05-25 22:46 1825在部署的时候如果遇到我们会遇到让liferay与其他的项目并存 ... -
velocity调用DB持久层,生成actionurl
2009-05-22 17:42 1173#set($hostelCacheService = $ser ... -
liferay 所有版本下载地址
2009-05-21 13:29 3207从1.7.5一直到现在的5.2.3,应有尽有。 htt ... -
liferay ldap配置与相关代码
2008-11-28 11:06 38221.下载LDAP server 并安装, liferay支 ... -
liferay 的加密技术(CRYPT,SHA,SSHA,MD2,MD5)
2008-11-27 15:59 4286package com.liferay.util; impo ... -
liferay验证码认证
2008-08-27 15:26 2734生成验证码相关: /** * Copyright (c ... -
很烦,想站在阳台上大声的喊
2008-08-20 19:42 1794终于到回家了,好累, ... -
网络爬虫相关(自已记下来,怕以后忘记)
2008-08-16 13:15 1925package com.taobao.html; impor ...
相关推荐
【Liferay 5.1.2 配置 Oracle 10G 数据库操作详解】 Liferay 是一款开源的企业级门户平台,它默认使用 HSQLDB 作为内置数据库。然而,在某些场景下,用户可能需要将数据库迁移至更强大的 Oracle 10G 数据库。这个...
例如,一个portlet的代码可能包含了渲染逻辑、服务端处理请求的方法,以及与视图(JSP)的交互。而一个主题的代码则会展示如何改变Liferay的外观和布局,包括CSS、图片和HTML模板的定制。 学习Liferay的源码和使用...
### Liferay Portal的内容和布局详解 #### 一、布局(Layout) **布局**是Liferay Portal中用于管理Portlet的关键概念之一。布局不仅决定着Portlet的呈现方式,还影响着用户的交互体验。在Liferay中,布局是通过一...
标题 "Liferay + CAS + LDAP 集成配置" 涉及到的是在企业级内容管理系统 Liferay 中集成 Central Authentication Service (CAS) 和 Lightweight Directory Access Protocol (LDAP) 的过程。这种集成允许用户通过CAS...
Liferay Portlet工程示例代码提供了开发者们一个深入理解并实践Liferay Portal平台上的portlet开发的宝贵资源。Liferay Portal是一款开源的企业级门户系统,它允许用户创建、管理和集成各种Web应用程序,而portlet...
另外,Liferay的数据存储通常依赖于数据库,因此了解如何设计和优化数据库查询,以及如何与Liferay的数据模型配合,对于性能优化至关重要。Liferay的缓存机制,如Hazelcast和OSCache,也是提高系统性能的关键。 ...
5. **安全性与权限**:Liferay的安全模型基于角色和权限,源代码可能会展示如何设置和管理用户权限,以及如何保护敏感数据。 6. **国际化和本地化**:Liferay支持多语言,源代码中可能包含资源文件,用于实现界面的...
在本文中,我们将深入探讨如何配置Liferay 4.2.0版本,这是一个知名的开源企业级门户平台。根据描述,虽然官方文档可能是针对4.3.5版本的,但据称4.2.0版本与之仅有微小差异。我们将重点关注如何在Eclipse集成环境中...
liferay-portal详解 Liferay Portal 是一个基于 Java 的开源门户平台,提供了一个灵活的框架来构建企业门户和 web 应用程序。本文档将从架构解析、portal 规范、portlet 容器、portlet 生命周期、liferay portal ...
本文将以“liferay表结构详解”为主题,聚焦于Liferay数据库中的Layout表,旨在详尽解读此表的功能与结构,以及它在Liferay门户系统中的关键作用。 ### Layout表:存储页面布局信息 **功能概述**:Layout表在...
本案例中,我们将探讨如何将Liferay 5.2.3与CAS(Central Authentication Service)配置为SSO系统。 Liferay是一款开源的企业级门户平台,它提供了一个灵活的框架来构建和管理Web应用程序。而CAS则是一个开源的身份...
【Liferay Portlet 对象详解】 在 Liferay 平台中,Portlet 是核心组件,它负责呈现内容和提供互动功能。Portlet 技术的理解和应用是开发 Liferay 应用程序的关键。本文将深入解析 Portlet 的关键概念,包括 ...
liferay开发文档.pdf Liferay 是一个基于Java的开源企业门户平台,...这些知识点涵盖了Liferay 的安装、配置、Portlet开发、术语与缩写解释、版本历史等方面,旨在帮助读者更好地理解Liferay 的工作原理和开发技术。
在 Liferay 与 CAS 集成的过程中,关键在于正确配置 CAS 服务器和 Liferay 的相关配置文件,确保两者之间的通信顺畅。通过这种方式,用户只需要一次登录即可访问所有集成的应用,提升了用户体验并强化了安全性。在...
liferay是一个强大的工具,开发者只用写一个持久层的配置文件,改工具就反向生成持久层和业务层的代码.简单说来,工具会自动生成hibernate层和spring层的相关代码,开发者只用关心控制层即可.
新建Liferay的DB,然后将该文件导入该DB后,即可创建Liferay所需要的Table,并insert提供的初始值。