`

Liferay Mvc 开发(增删改查)

 
阅读更多

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 是什么意思?

  1. com.liferay.portal.kernel.portlet.LiferayPortlet.StrutsPortlet中获取方式:
  2. PermissionChecker permissionChecker =
  3. PermissionThreadLocal.getPermissionChecker();
  4. com.liferay.portlet.journal.service.permission.JournalArticlePermission
  5. 页面中:
  6. JournalArticlePermission.contains(permissionChecker, article, ActionKeys.UPDATE)
  7. 页面中直接拿permissionChecker对象是通过com.liferay.taglib.theme.DefineObjectsTei定义的:
  8. new VariableInfo(
  9. "permissionChecker", PermissionChecker.class.getName(), true,
  10. VariableInfo.AT_END),
  11. JournalArticlePermission:>>>>>
  12. publicstaticboolean contains(
  13. PermissionChecker permissionChecker, JournalArticle article,
  14. String actionId) {
  15. if (permissionChecker.hasOwnerPermission(
  16. article.getCompanyId(), JournalArticle.class.getName(),
  17. article.getResourcePrimKey(), article.getUserId(), actionId)) {
  18. returntrue;
  19. }
  20. return permissionChecker.hasPermission(
  21. article.getGroupId(), JournalArticle.class.getName(),
  22. article.getResourcePrimKey(), actionId);
  23. }
  24. //通过ThemeDisplay也可以拿permissionChecker
  25. ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
  26. WebKeys.THEME_DISPLAY);
  27. PermissionChecker permissionChecker =
  28. themeDisplay.getPermissionChecker();
  29. //==================================================
  30. //通过PermissionThreadLocal也可以拿permissionChecker
  31. PermissionChecker permissionChecker =
  32. PermissionThreadLocal.getPermissionChecker();
  33. 为什么?
  34. 因为>>:PermissionCheckerUtil
  35. publicstaticvoid setThreadValues(User user) {
  36. long userId = user.getUserId();
  37. String name = String.valueOf(userId);
  38. PrincipalThreadLocal.setName(name);
  39. try {
  40. PermissionChecker permissionChecker =
  41. PermissionThreadLocal.getPermissionChecker();
  42. if (permissionChecker == null) {
  43. permissionChecker = (PermissionChecker)Class.forName(
  44. PropsValues.PERMISSIONS_CHECKER).newInstance();
  45. /**
  46. PropsValues.PERMISSIONS_CHECKER
  47. PropsValues>>>
  48. public static final String PERMISSIONS_CHECKER =
  49. PropsUtil.get(PropsKeys.PERMISSIONS_CHECKER); //就是PropsUtil.get("permissions.checker");
  50. portal.properties>>>>:
  51. permissions.checker=com.liferay.portal.security.permission.AdvancedPermissionChecker
  52. */
  53. }
  54. permissionChecker.init(user, _CHECK_GUEST);
  55. PermissionThreadLocal.setPermissionChecker(permissionChecker);
  56. }
  57. catch (Exception e) {
  58. _log.error(e);
  59. 什么时候在哪里会调用PermissionCheckerUtil.setThreadValues(user);呢?
  60. 两个地方:
  61. 1)MessageListenerImpl类的方法deliver中: PermissionCheckerUtil.setThreadValues(user);
  62. 2)MailingListMessageListener类的方法processMessage中:PermissionCheckerUtil.setThreadValues(user);
  63. 继续问,什么时候操作MessageListener?
  64. 在MainServlet的init方法中:
  65. try {
  66. Iterator<Portlet> itr = portlets.iterator();
  67. while (itr.hasNext()) {
  68. Portlet portlet = itr.next();
  69. MessageListener popMessageListener =
  70. portlet.getPopMessageListenerInstance();
  71. if (!portlet.isActive() || (popMessageListener == null)) {
  72. continue;
  73. }
  74. POPServerUtil.addListener(popMessageListener);
  75. /*上面这个方法会调用
  76. _instance._addListener(listener);
  77. 而_instance:private static POPServerUtil _instance = new POPServerUtil();
  78. */
  79. }
  80. }
  81. catch (Exception e) {
  82. _log.error(e, e);
  83. }
  84. //============================权限验证方式二=========================================
  85. PermissionLocalServiceImpl:
  86. boolean hasUserPermission(long userId, String actionId, long resourceId)
  87. resourceId是什么东西?
  88. //=========================权限验证方式三===========================================
  89. PortletPermissionUtil:
  90. publicstaticboolean contains(PermissionChecker permissionChecker, long plid, String portletId,String actionId)
  91. throws PortalException, SystemException{}
  92. 怎么获取plid和portletId? (分别数据库表PORTLETPREFERENCES 的字段PLID和PORTLETID)====>>>>>>>
  93. ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
  94. long plId=themeDisplay.getPlid();
  95. String portletId=themeDisplay.getPortletDisplay().getId();
  96. 实战代码:
  97. PermissionChecker permissionChecker=PermissionThreadLocal.getPermissionChecker();
  98. ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
  99. long plId=themeDisplay.getPlid();
  100. String portletId=themeDisplay.getPortletDisplay().getId();
  101. if( PortletPermissionUtil.contains(permissionChecker,plId,portletId,ActionKeys.CONFIGURATION)){
  102. //做你想做的事
  103. }

分享到:
评论

相关推荐

    liferay6增删改查例子

    【标题】"liferay6增删改查例子"是一个基于Liferay6门户平台的开发实践,专注于用户个人信息管理的功能实现。在这个项目中,开发者利用Eclipse9作为集成开发环境,结合Liferay6.0版本,设计并实现了针对个人数据的全...

    Liferay6.1 ServiceBuilder增删改查示例 源代码

    Service Builder是Liferay IDE(SDK)提供的一种代码生成方案,开发人员只需要编辑一个数据库的实体描述文件,即可根据本XML文件生成Spring层代码、Hibernate层代码、SQL、SQL索引创建文件、Spring和hibernate的配置...

    liferay实现增删改查的源代码

    liferay是一个强大的工具,开发者只用写一个持久层的配置文件,改工具就反向生成持久层和业务层的代码.简单说来,工具会自动生成hibernate层和spring层的相关代码,开发者只用关心控制层即可.

    liferay-spring-mvc-portlet:Liferay Spring MVC portlet 的项目模板

    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 ...

    liferay的开发文档

    通过学习这份文档,开发者能够理解portlet生命周期、渲染机制以及如何利用MVC Portlet模式进行开发。此外,文档还涵盖了portlet与Liferay服务的集成,如ServiceBuilder,用于自动生成服务层代码,以及如何利用...

    liferay6.2开发指南.pdf

    【Liferay 6.2 开发指南】 Liferay 6.2 是一个开源的企业级门户平台,它提供了丰富的功能和高度可扩展性,适合构建企业内部或外部的协作、信息共享和业务应用集成的网站。本开发指南将帮助开发者深入理解 Liferay ...

    liferay portal 开发实例

    在这个开发实例中,我们将深入探讨四个Liferay Portal MVC(Model-View-Controller)应用的实践案例,这些实例可以帮助开发者更好地理解如何在Liferay环境中进行portlet开发。 首先,让我们了解MVC模式在Liferay中...

    LIferay6开发书籍

    《Liferay6开发书籍》是一套全面探讨Liferay Portal 6企业应用开发的资源集合,旨在帮助开发者深入了解和掌握Liferay平台的各个层面。Liferay是一个开源的企业级内容管理系统,常用于构建数字体验平台,提供丰富的...

    liferay开发文档集合

    4. **《liferay_4_portlet_development_guide.pdf》** - 该文档专注于Liferay中的portlet开发,讲解了portlet生命周期、MVC Portlet、JSR 286规范以及如何在Liferay平台上创建和集成portlet,对于想要开发Liferay...

    liferay portal开发大全

    **Liferay Portal 开发大全** Liferay Portal 是一个开源的企业级门户平台,广泛用于构建复杂的Web应用程序和企业内部协作系统。它提供了丰富的功能,包括内容管理、社交媒体集成、工作流支持以及用户界面定制。本...

    liferay 6.2开发指南+用户手册

    Liferay 6.2是一款流行的开源企业级门户平台,它提供了丰富的功能,包括内容管理、社交媒体集成、工作流程以及自定义开发能力。本指南将基于提供的"liferay 6.2开发指南+用户手册"来深入讲解其核心知识点。 1. **...

    Liferay开发文档整理.pdf

    通过上述内容的整理和总结,可以看出文档主要介绍了Liferay开发的基础概念,包括Liferay的版本信息、Portlet开发、主题和布局模板的自定义、插件SDK和Liferay IDE的使用,以及如何配置开发环境。同时,也涉及了...

    Liferay入门帮助文档(Liferay开发指南)

    在前端,Liferay采用了Struts MVC框架,增强了用户界面的交互性。其portlet配置文件基于XML,允许开发者灵活地进行动态扩展,增加了系统的可定制性。此外,Liferay还利用Web服务来获取远程信息,并采用Lucene作为其...

    liferay 6.0 开发指南

    ### Liferay 6.0 开发指南核心知识点详解 #### 一、引言与核心技术 在《Liferay 6.0 开发指南》中,首先介绍了Liferay 6.0的核心技术及其开发策略。Liferay是一款强大的开源门户平台,支持企业级应用的构建与部署...

    7z压缩,三合一-LifeRay-开发参考手册&二次开发指南&4.3中文开发指南

    【标题】"7z压缩,三合一-LifeRay-开发参考手册&二次开发指南&4.3中文开发指南" 涵盖了LifeRay平台的重要学习资源,这些文档为开发者提供了全面的指导,帮助他们理解并掌握LifeRay的开发技术。 【描述】中提到的三...

    Liferay 主题开发官方文档中文翻译

    ### Liferay 6.2 主题开发中文指南 #### 一、引言 在现代Web开发领域中,网站不仅需要具备强大的功能,还需要拥有吸引人的视觉设计与良好的用户体验。Liferay作为一款开源的企业级门户平台,提供了丰富的工具与...

    LifeRay框架开发手册,PORTAL类一个开发框架Liferay

    LifeRay架构开发手册,liferay Portal开发解析等精彩文章

    Liferay 6.2 开发环境搭建

    Liferay 6.2 开发环境搭建.doc,包括Liferay SDK下载及搭建过程等!

    liferay6.2开发完全指南

    《Liferay 6.2 开发完全指南》是一本针对Liferay最新版本6.2的详尽教程,旨在帮助开发者全面理解和掌握Liferay平台的开发技术。本教程以Liferay官方的技术文档为基础,同时提供了配套的视频教程,使得学习过程更为...

Global site tag (gtag.js) - Google Analytics