1、ThemeDisplay是什么意思?
在Portlet中request分为两种renderRequet和actionRequest而portlet需要取得实例Id的时候都在renderRequest的时候才可以取到,如下例子
PortletPreferences preferences = renderRequest.getPreferences(); String portletResource = ParamUtil.getString(request, "portletResource"); if (Validator.isNotNull(portletResource)) { preferences = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource); } 其中portletResource是portlet的id 然后通过PortletPreferencesFactoryUtil工具类可以取得相应的portlet配置信息。
而在actionRequest是取不到的portlet实例的id的,actionRequest只是把当前页面所有东西传进来而已,中间经过portletAcition做了处理,如果在portletAction中做取portletId是不可取的,但是在Liferay中已经提供了这样的方法可以让我们在actionRequest中取得portlet的实例Id代码如下
ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest .getAttribute(WebKeys.THEME_DISPLAY); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); System.out.println("portletDisplay---->"+portletDisplay.getInstanceId()); System.out.println("portletDisplay getId---->"+portletDisplay.getId()); System.out.println("portletDisplay getPortletName---->"+portletDisplay.getPortletName());
这样就可以取到我们需要的对应的portlet实例id了
其中WebKeys.THEME_DISPLAY是Liferay中里面的接口常量 对应的名字是 THEME_DISPLAY
2、
PermissionChecker 是什么意思?
- com.liferay.portal.kernel.portlet.LiferayPortlet.StrutsPortlet中获取方式:
- PermissionChecker permissionChecker =
- PermissionThreadLocal.getPermissionChecker();
- com.liferay.portlet.journal.service.permission.JournalArticlePermission
- 页面中:
- JournalArticlePermission.contains(permissionChecker, article, ActionKeys.UPDATE)
- 页面中直接拿permissionChecker对象是通过com.liferay.taglib.theme.DefineObjectsTei定义的:
- new VariableInfo(
- "permissionChecker", PermissionChecker.class.getName(), true,
- VariableInfo.AT_END),
- JournalArticlePermission:>>>>>
- publicstaticboolean contains(
- PermissionChecker permissionChecker, JournalArticle article,
- String actionId) {
- if (permissionChecker.hasOwnerPermission(
- article.getCompanyId(), JournalArticle.class.getName(),
- article.getResourcePrimKey(), article.getUserId(), actionId)) {
- returntrue;
- }
- return permissionChecker.hasPermission(
- article.getGroupId(), JournalArticle.class.getName(),
- article.getResourcePrimKey(), actionId);
- }
- //通过ThemeDisplay也可以拿permissionChecker
- ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
- WebKeys.THEME_DISPLAY);
- PermissionChecker permissionChecker =
- themeDisplay.getPermissionChecker();
- //==================================================
- //通过PermissionThreadLocal也可以拿permissionChecker
- PermissionChecker permissionChecker =
- PermissionThreadLocal.getPermissionChecker();
- 为什么?
- 因为>>:PermissionCheckerUtil
- publicstaticvoid setThreadValues(User user) {
- long userId = user.getUserId();
- String name = String.valueOf(userId);
- PrincipalThreadLocal.setName(name);
- try {
- PermissionChecker permissionChecker =
- PermissionThreadLocal.getPermissionChecker();
- if (permissionChecker == null) {
- permissionChecker = (PermissionChecker)Class.forName(
- PropsValues.PERMISSIONS_CHECKER).newInstance();
- /**
- PropsValues.PERMISSIONS_CHECKER
- PropsValues>>>
- public static final String PERMISSIONS_CHECKER =
- PropsUtil.get(PropsKeys.PERMISSIONS_CHECKER); //就是PropsUtil.get("permissions.checker");
- portal.properties>>>>:
- permissions.checker=com.liferay.portal.security.permission.AdvancedPermissionChecker
- */
- }
- permissionChecker.init(user, _CHECK_GUEST);
- PermissionThreadLocal.setPermissionChecker(permissionChecker);
- }
- catch (Exception e) {
- _log.error(e);
- 什么时候在哪里会调用PermissionCheckerUtil.setThreadValues(user);呢?
- 两个地方:
- 1)MessageListenerImpl类的方法deliver中: PermissionCheckerUtil.setThreadValues(user);
- 2)MailingListMessageListener类的方法processMessage中:PermissionCheckerUtil.setThreadValues(user);
- 继续问,什么时候操作MessageListener?
- 在MainServlet的init方法中:
- try {
- Iterator<Portlet> itr = portlets.iterator();
- while (itr.hasNext()) {
- Portlet portlet = itr.next();
- MessageListener popMessageListener =
- portlet.getPopMessageListenerInstance();
- if (!portlet.isActive() || (popMessageListener == null)) {
- continue;
- }
- POPServerUtil.addListener(popMessageListener);
- /*上面这个方法会调用
- _instance._addListener(listener);
- 而_instance:private static POPServerUtil _instance = new POPServerUtil();
- */
- }
- }
- catch (Exception e) {
- _log.error(e, e);
- }
- //============================权限验证方式二=========================================
- PermissionLocalServiceImpl:
- boolean hasUserPermission(long userId, String actionId, long resourceId)
- resourceId是什么东西?
- //=========================权限验证方式三===========================================
- PortletPermissionUtil:
- publicstaticboolean contains(PermissionChecker permissionChecker, long plid, String portletId,String actionId)
- throws PortalException, SystemException{}
- 怎么获取plid和portletId? (分别数据库表PORTLETPREFERENCES 的字段PLID和PORTLETID)====>>>>>>>
- ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
- long plId=themeDisplay.getPlid();
- String portletId=themeDisplay.getPortletDisplay().getId();
- 实战代码:
- PermissionChecker permissionChecker=PermissionThreadLocal.getPermissionChecker();
- ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
- long plId=themeDisplay.getPlid();
- String portletId=themeDisplay.getPortletDisplay().getId();
- if( PortletPermissionUtil.contains(permissionChecker,plId,portletId,ActionKeys.CONFIGURATION)){
- //做你想做的事
- }
相关推荐
【标题】"liferay6增删改查例子"是一个基于Liferay6门户平台的开发实践,专注于用户个人信息管理的功能实现。在这个项目中,开发者利用Eclipse9作为集成开发环境,结合Liferay6.0版本,设计并实现了针对个人数据的全...
Service Builder是Liferay IDE(SDK)提供的一种代码生成方案,开发人员只需要编辑一个数据库的实体描述文件,即可根据本XML文件生成Spring层代码、Hibernate层代码、SQL、SQL索引创建文件、Spring和hibernate的配置...
liferay是一个强大的工具,开发者只用写一个持久层的配置文件,改工具就反向生成持久层和业务层的代码.简单说来,工具会自动生成hibernate层和spring层的相关代码,开发者只用关心控制层即可.
Liferay Spring Portlet MVC 使用 Maven 的 Liferay Spring Portlet MVC 项目模板。 Liferay EE 6.2.10.11 (GA1, SP710) Java 1.7 小门户 2.0 弹簧框架 4.1.5 基于注解的控制器配置 用法 $ git clone ...
通过学习这份文档,开发者能够理解portlet生命周期、渲染机制以及如何利用MVC Portlet模式进行开发。此外,文档还涵盖了portlet与Liferay服务的集成,如ServiceBuilder,用于自动生成服务层代码,以及如何利用...
【Liferay 6.2 开发指南】 Liferay 6.2 是一个开源的企业级门户平台,它提供了丰富的功能和高度可扩展性,适合构建企业内部或外部的协作、信息共享和业务应用集成的网站。本开发指南将帮助开发者深入理解 Liferay ...
在这个开发实例中,我们将深入探讨四个Liferay Portal MVC(Model-View-Controller)应用的实践案例,这些实例可以帮助开发者更好地理解如何在Liferay环境中进行portlet开发。 首先,让我们了解MVC模式在Liferay中...
《Liferay6开发书籍》是一套全面探讨Liferay Portal 6企业应用开发的资源集合,旨在帮助开发者深入了解和掌握Liferay平台的各个层面。Liferay是一个开源的企业级内容管理系统,常用于构建数字体验平台,提供丰富的...
4. **《liferay_4_portlet_development_guide.pdf》** - 该文档专注于Liferay中的portlet开发,讲解了portlet生命周期、MVC Portlet、JSR 286规范以及如何在Liferay平台上创建和集成portlet,对于想要开发Liferay...
**Liferay Portal 开发大全** Liferay Portal 是一个开源的企业级门户平台,广泛用于构建复杂的Web应用程序和企业内部协作系统。它提供了丰富的功能,包括内容管理、社交媒体集成、工作流支持以及用户界面定制。本...
Liferay 6.2是一款流行的开源企业级门户平台,它提供了丰富的功能,包括内容管理、社交媒体集成、工作流程以及自定义开发能力。本指南将基于提供的"liferay 6.2开发指南+用户手册"来深入讲解其核心知识点。 1. **...
通过上述内容的整理和总结,可以看出文档主要介绍了Liferay开发的基础概念,包括Liferay的版本信息、Portlet开发、主题和布局模板的自定义、插件SDK和Liferay IDE的使用,以及如何配置开发环境。同时,也涉及了...
在前端,Liferay采用了Struts MVC框架,增强了用户界面的交互性。其portlet配置文件基于XML,允许开发者灵活地进行动态扩展,增加了系统的可定制性。此外,Liferay还利用Web服务来获取远程信息,并采用Lucene作为其...
### Liferay 6.0 开发指南核心知识点详解 #### 一、引言与核心技术 在《Liferay 6.0 开发指南》中,首先介绍了Liferay 6.0的核心技术及其开发策略。Liferay是一款强大的开源门户平台,支持企业级应用的构建与部署...
【标题】"7z压缩,三合一-LifeRay-开发参考手册&二次开发指南&4.3中文开发指南" 涵盖了LifeRay平台的重要学习资源,这些文档为开发者提供了全面的指导,帮助他们理解并掌握LifeRay的开发技术。 【描述】中提到的三...
### Liferay 6.2 主题开发中文指南 #### 一、引言 在现代Web开发领域中,网站不仅需要具备强大的功能,还需要拥有吸引人的视觉设计与良好的用户体验。Liferay作为一款开源的企业级门户平台,提供了丰富的工具与...
LifeRay架构开发手册,liferay Portal开发解析等精彩文章
Liferay 6.2 开发环境搭建.doc,包括Liferay SDK下载及搭建过程等!
《Liferay 6.2 开发完全指南》是一本针对Liferay最新版本6.2的详尽教程,旨在帮助开发者全面理解和掌握Liferay平台的开发技术。本教程以Liferay官方的技术文档为基础,同时提供了配套的视频教程,使得学习过程更为...