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)){
- //做你想做的事
- }
相关推荐
在eclipse9下用liferay6.0开发了一套对个人信息的增删改查的例子,数据库为mysql,
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 ...
liferay portal 开发指南liferay portal 开发指南liferay portal 开发指南liferay portal 开发指南
包括liferay的用户配置,系统接口,包括Liferay Portal 6 企业应用开发,Liferay 用户开发接口,Liferay+in+Action,Liferay 系统开发等
liferay 6.2 开发指南+用户手册 官方文档
里面有四个小型的liferay portal mvc实例,所需要的jar文件大家可以在eclipse里面新建一个portlet项目,再将里面的实例代码拷贝进去即可运行
LifeRay架构开发手册,liferay Portal开发解析等精彩文章
liferay 6.0 开发指南 liferay-developer-guide-6.0.pdf
liferay6.2开发指南liferay6.2开发指南.doc
Liferay 主题开发 官方文档 中文翻译
liferay开发liferay开发liferay开发liferay开发
liferay开发文档集合7个pdf
包含四个liferay的中文开发文档,个人网上找了很久的。觉得不错,分享一下。要三分不多吧?毕竟有四个文档哦。
liferay6中文开发文档 包括: Liferay6开发者手册V1.0.doc Liferay+6.0.5开发指南.docx LiferayPortal二次开发指南.pdf Liferay代码研读.pdf liferay-技术文档.doc liferay架构.pdf Liferay开发环境配置说明文档.pdf
liferay6.2 增删改查列子,自己写的。
包含liferay portal开发,帮助,架构,代码,等portlet中文文档 ,PDF格式
Liferay开发文档整理.pdf
liferay portlet 开发的例子介绍