- 浏览: 213535 次
- 性别:
- 来自: 湖北->上海
最新评论
-
苹果超人:
我也遇到这个问题,我想在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 2446在 本系列 的 第 1 部分 简要回顾了JSR 1 ... -
JSR 286 Portlet 的新特性,第 2 部分: 资源服务、事件与共享呈现参数
2010-05-31 18:42 2175在本系列的 第 1 部分 简要回顾了 J ... -
JSR 286 Portlet 的新特性,第 1 部分: Portlet 2.0 新特性介绍
2010-05-31 17:55 2325本系列文章专门针 ... -
Session share
2010-05-14 12:18 0Tomcat Server.xml <Servi ... -
Liferay集群负载均衡配置
2009-10-30 11:14 4836先介绍一下项目系统的环境, Liferay Version: ... -
Liferay 集群部署
2009-10-30 00:00 0十二点了,明天断续 -
Liferay 权限策略
2009-10-29 23:45 3060先上一张大家都很熟悉的图 这张图可以说是整 ... -
Liferay Portlet之间的通信
2009-10-29 19:12 4931从我做Liferay到现在,这个问题一直都存在着,直到最近我才 ... -
Liferay异步提交
2009-10-29 18:06 3357liferay的异步提交其实是非常简单的,他用的是json & ... -
Liferay异步刷新
2009-10-29 18:05 3132Liferay portlet异步刷新,分为两种情况。 ... -
准备开始整理半年来对lifeay新的学习成果
2009-10-29 18:04 1454有半年没有写过liferay的blog了,不过对life ... -
Ajax知识
2009-06-11 17:50 0<SCRIPT LANGUAGE=" ... -
改变Liferay Portal Context(让Liferay不在使用ROOT目录)
2009-05-25 22:46 1781在部署的时候如果遇到我们会遇到让liferay与其他的项目并存 ... -
velocity调用DB持久层,生成actionurl
2009-05-22 17:42 1134#set($hostelCacheService = $ser ... -
liferay 所有版本下载地址
2009-05-21 13:29 3114从1.7.5一直到现在的5.2.3,应有尽有。 htt ... -
liferay ldap配置与相关代码
2008-11-28 11:06 37401.下载LDAP server 并安装, liferay支 ... -
liferay 的加密技术(CRYPT,SHA,SSHA,MD2,MD5)
2008-11-27 15:59 4175package com.liferay.util; impo ... -
liferay验证码认证
2008-08-27 15:26 2637生成验证码相关: /** * Copyright (c ... -
很烦,想站在阳台上大声的喊
2008-08-20 19:42 1772终于到回家了,好累, ... -
网络爬虫相关(自已记下来,怕以后忘记)
2008-08-16 13:15 1901package com.taobao.html; impor ...
相关推荐
详细介绍了Liferay的安装与配置详解
Liferay(5.1.2)的数据库由自身绑定的HSQLDB转成oracle(10G)虽然步骤不多,但因英文的参考资料说的太笼统,而网上相关资料又太少,所以操作起来很费时费力,尤其是当某个错误的操作,出现一大堆的错误提示,可能误导...
Liferay Portal针对不同的用户会展现出不同的服务网页。当浏览Portal主页网址http://localhost:8080/时,自动转入网址http://localhost:8080/web/guest/home调出面向所有人的Guest社区公共主页。一个注册用户登录...
liferay-portal详解
本教程主要是对Liferay Portal的内容和布局进行了详细的介绍与说明。
可供参考的liferay开发的portlet示例工程,学习参考的简单示例
liferay代码生成器liferay代码生成器liferay代码生成器liferay代码生成器liferay代码生成器liferay代码生成器liferay代码生成器
Liferay 6.0.5 portal.properties 配置文件详解 详细说明了 portal.properties 配置文件可以配置的所有属性
liferay是一个强大的工具,开发者只用写一个持久层的配置文件,改工具就反向生成持久层和业务层的代码.简单说来,工具会自动生成hibernate层和spring层的相关代码,开发者只用关心控制层即可.
新建Liferay的DB,然后将该文件导入该DB后,即可创建Liferay所需要的Table,并insert提供的初始值。
Liferay in actin一书的源代码
NULL 博文链接:https://123ken123.iteye.com/blog/670666
liferay表详细解释
Liferay5.2.3和CAS配置成SSO
liferay代码研读liferay代码研读liferay代码研读
Liferay工作流简要配置
liferay_系列初始Ide_SDK入门教程,Eclipse的lifeRay配置使用
NULL 博文链接:https://hanchaohang.iteye.com/blog/1064360
详解portlet技术,是帮助你学习进步的好助手哦。快来下载吧