`
xijunhu
  • 浏览: 155484 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

liferay过滤器(三)

 
阅读更多

1、Minifier过滤器

主要代码:

if (realPath.endsWith(_CSS_EXTENSION)) {
    if (_log.isInfoEnabled()) {
     _log.info("Minifying CSS " + file);
    }

    minifiedContent = minifyCss(request, file);

    response.setContentType(ContentTypes.TEXT_CSS);

    FileUtil.write(cacheContentTypeFile, ContentTypes.TEXT_CSS);
   }
   else if (realPath.endsWith(_JAVASCRIPT_EXTENSION)) {
    if (_log.isInfoEnabled()) {
     _log.info("Minifying JavaScript " + file);
    }

    minifiedContent = minifyJavaScript(file);

    response.setContentType(ContentTypes.TEXT_JAVASCRIPT);

    FileUtil.write(
     cacheContentTypeFile, ContentTypes.TEXT_JAVASCRIPT);
   }
   else if (realPath.endsWith(_JSP_EXTENSION)) {
    if (_log.isInfoEnabled()) {
     _log.info("Minifying JSP " + file);
    }

    StringServletResponse stringResponse =
     new StringServletResponse(response);

    processFilter(
     MinifierFilter.class, request, stringResponse, filterChain);

    CacheResponseUtil.setHeaders(
     response, stringResponse.getHeaders());

    response.setContentType(stringResponse.getContentType());

    minifiedContent = stringResponse.getString();

    if (minifierType.equals("css")) {
     minifiedContent = minifyCss(request, minifiedContent);
    }
    else if (minifierType.equals("js")) {
     minifiedContent = minifyJavaScript(minifiedContent);
    }

    FileUtil.write(
     cacheContentTypeFile, stringResponse.getContentType());
   }
   else {
    return null;
   }

   FileUtil.write(cacheDataFile, minifiedContent);

 

功能: minifier filter 根据portalet的的配置文件liferay-portlet.xml设置的css、js路径、jsp路径,组合新的路径放到response中。在portalet中,jsp中设置的js或css路径不起作用,liferay自己的默认的/MyPortletName//docroot/WEB-INF/liferay-portlet.xml里面定义的。默认是:<footer-portlet-javascript>/js/main.js</footer-portlet-javascript>,这时在liferay-portlet.xml里面设置的,如果不需要此过滤器,可以在portal-ext.properties中设置com.liferay.portal.servlet.filters.minifier.MinifierFilter=false

 

2、MonitoringFilter 过滤器

主要代码:

long companyId = PortalUtil.getCompanyId(request);

  PortalRequestDataSample portalRequestDataSample =
   new PortalRequestDataSample(
    companyId, request.getRemoteUser(), request.getRequestURI(),
    request.getRequestURL().toString());

  try {
   portalRequestDataSample.prepare();

   processFilter(
    MonitoringFilter.class, request, response, filterChain);

   portalRequestDataSample.capture(RequestStatus.SUCCESS);
  }
  catch (Exception e) {
   portalRequestDataSample.capture(RequestStatus.ERROR);

   if (e instanceof IOException) {
    throw (IOException)e;
   }
   else if (e instanceof ServletException) {
    throw (ServletException)e;
   }
   else {
    throw new ServletException("Unable to execute request", e);
   }
  }
  finally {
   MessageBusUtil.sendMessage(
    DestinationNames.MONITORING, portalRequestDataSample);

   DataSampleThreadLocal.addDataSample(portalRequestDataSample);
  }

 

作用:监控服务器响应时间(没怎么看懂,猜得)

 

3、SecureFilter  过滤器

主要代码:

if (isAccessAllowed(request)) {
   if (_log.isDebugEnabled()) {
    _log.debug("Access allowed for " + remoteAddr);
   }
  }
  else {
   if (_log.isWarnEnabled()) {
    _log.warn("Access denied for " + remoteAddr);
   }

   response.sendError(
    HttpServletResponse.SC_FORBIDDEN,
    "Access denied for " + remoteAddr);

   return;
  }

  if (_log.isDebugEnabled()) {
   if (_httpsRequired) {
    _log.debug("https is required");
   }
   else {
    _log.debug("https is not required");
   }
  }

功能:判断访问地址是否安全,是否走https://

 

4、SessionIdFilter过滤器

主要代码:

SessionIdServletRequest sessionIdRequest = new SessionIdServletRequest(
   request, response);

功能:如果 com.liferay.portal.servlet.filters.sessionid.SessionIdFilter=true,保证只一个session创建

 

5、CASFilter过滤器

主要代码:

if (pathInfo.indexOf("/portal/logout") != -1) {
    session.invalidate();

    String logoutUrl = PrefsPropsUtil.getString(
     companyId, PropsKeys.CAS_LOGOUT_URL,
     PropsValues.CAS_LOGOUT_URL);

    response.sendRedirect(logoutUrl);

    return;
   }
   else {
    String login = (String)session.getAttribute(LOGIN);

    String serverName = PrefsPropsUtil.getString(
     companyId, PropsKeys.CAS_SERVER_NAME,
     PropsValues.CAS_SERVER_NAME);

    String serviceUrl = PrefsPropsUtil.getString(
     companyId, PropsKeys.CAS_SERVICE_URL,
     PropsValues.CAS_SERVICE_URL);

    if (Validator.isNull(serviceUrl)) {
     serviceUrl = CommonUtils.constructServiceUrl(
      request, response, serviceUrl, serverName, "ticket",
      false);
    }

    String ticket = ParamUtil.getString(request, "ticket");

    if (Validator.isNull(ticket)) {
     if (Validator.isNotNull(login)) {
      processFilter(
       CASFilter.class, request, response, filterChain);
     }
     else {
      String loginUrl = PrefsPropsUtil.getString(
       companyId, PropsKeys.CAS_LOGIN_URL,
       PropsValues.CAS_LOGIN_URL);

      loginUrl = HttpUtil.addParameter(
       loginUrl, "service", serviceUrl);

      response.sendRedirect(loginUrl);
     }

     return;
    }

    TicketValidator ticketValidator = getTicketValidator(
     companyId);

    Assertion assertion = ticketValidator.validate(
     ticket, serviceUrl);

    if (assertion != null) {
     AttributePrincipal attributePrincipal =
      assertion.getPrincipal();

     login = attributePrincipal.getName();

     session.setAttribute(LOGIN, login);
    }

 

主要功能:单点登录(具体实现要详细的研读代码)

 

6、NtlmFilter过滤器

主要代码(略)

功能:单点登录

 

7、NtlmPostFilter过滤器

主要代码(略)

功能:单点登录

 

8、OpenSSOFilter过滤器

主要代码(略)

功能:单点登录

 

9、ValidHtmlFilter过滤器

主要代码:

protected String getContent(HttpServletRequest request, String content) {
  content = StringUtil.replaceLast(
   content, _CLOSE_BODY, StringPool.BLANK);
  content = StringUtil.replaceLast(
   content, _CLOSE_HTML, _CLOSE_BODY + _CLOSE_HTML);

  return content;
 }

主要功能:处理html数据,把html中的</body></html>放在在一起。(html类型为 text/html )

 

10、UrlRewriteFilter过滤器

主要代码:(略)

功能:重写uRL(根据配置文件urlrewrite.xml的规则,重写URL,主要是为了安全。)

 

 

分享到:
评论

相关推荐

    liferay-https-filter-hook:Liferay HTTPS Servlet请求过滤器挂钩

    Liferay HTTPS Servlet请求过滤器挂钩 当您有一个损坏的设置(其中HTTPS在Liferay前面的LB或Apache处终止)但应用程序服务器不知道请求是通过https服务并且不会生成正确的URL时,此筛选器挂钩可与Liferay一起使用。 ...

    liferay6.2 CRUD FriendlyURL Search-Container

    在Liferay中,这通常通过服务建设器(Service Builder)来实现,这是一个工具,可以帮助开发者自动生成数据库表、服务接口、服务实现以及相应的DAO(数据访问对象)。通过配置service.xml文件,你可以定义数据模型,...

    LIferay 自带标签介绍

    `&lt;liferay-ui:search-container&gt;` 标签是Liferay中最强大的UI标签之一,它提供了一个完整的搜索界面,包括过滤器、排序、分页等功能。开发者只需要提供数据源和字段定义即可。 ### 示例和代码 在实际应用中,这些...

    Liferay与LDAP集成

    在Liferay中配置LDAP需要设置LDAP的各个参数,如服务端口、搜索过滤器等,并且要确保Liferay服务器能够正确地连接到LDAP服务器。在Liferay 7.x及更高版本中,系统管理界面有专门的LDAP选项用于配置,可以将Liferay的...

    liferay使用的标签

    通过配置搜索容器,可以定义搜索字段、过滤器、排序方式以及结果的展示样式。 在实际开发中,理解并熟练使用这些标签对于创建高效、易用的Liferay应用至关重要。Liferay的搜索容器尤其值得深入研究,因为它集成了...

    liferay-oidc-plugin:Liferay插件,启用OpenID Connect身份验证

    Servlet过滤器(使用Liferay的Servlet过滤器钩子)拦截正常的登录流并重定向到OpenID Connect提供程序,获取访问令牌并获取用户信息 自动登录以完成身份验证 配置 配置在6.2和DXP / 7.0 +之间有所不同。 对于DXP / ...

    liferay标签

    代码部分会详细解释每个标签的属性和用法,以及如何与后端控制器或服务交互。 例如,创建一个简单的`&lt;liferay-ui:tabs&gt;`标签可能如下所示: ```jsp &lt;liferay-ui:tabs names="tab1,tab2"&gt; &lt;liferay-ui:tab name=...

    liferay7.0AutoLoginExample

    一个非常简单的自动登录示例,用于演示servlet过滤器和liferay中的自动登录的工作方式。 它带有一个nodejs服务器,该服务器拦截对liferay的http调用并将“ iv-user”注入到http标头中,就像webseal一样。 自动登录...

    LiferayPortal二次开发指南破解版.pdf

    web.xml 文件是 Web 应用程序的部署描述文件,用于配置 Servlet、过滤器等组件。 ##### 2.6.2 portlet.xml portlet.xml 文件用于描述 Portlet 的元数据,包括 Portlet 的名称、版本、配置参数等信息。 ##### 2.6.3...

    liferay-solr-tutorial

    4. **Solr 查询与优化**:深入解析 Solr 查询语法,包括标准查询解析器、高亮显示、拼写检查和同义词扩展。同时,我们将探讨如何分析查询性能,优化查询语句,以及调整 Solr 配置以提高搜索响应速度。 5. **Solr 分...

    ntlmv2-auth:用于 Java 的 NTLMv2 身份验证库和过滤器-开源

    而ntlmv2-auth库就是基于Liferay Portal对JCIFS的扩展进行开发的,它提供了更方便的API和过滤器,使得Java开发者能够在自己的应用中实现NTLMv2身份验证。 在实际应用中,"ntlmv2-auth"库可以被集成到各种Java应用中...

    sample-dao-portlet-4.0.0.zip_portal java

    例如,web.xml是Web应用的部署描述符,可能包含了Portlet的配置信息,如初始化参数和过滤器等。 综上所述,这个项目主要教授如何在Liferay Portal中利用Java和JDBC技术开发Portlet。开发者将学习到如何创建JSP页面...

    Portlets in Action

    #### 章节十三:使用Portlet过滤器实现可重用逻辑 - **过滤器模式**:介绍Portlet过滤器的作用和工作原理,以及如何利用过滤器模式来提高代码的复用性。 - **过滤器应用案例**:提供具体的案例,展示如何利用...

    java源码留言本-rest-builder-docs:REST构建器文档

    生成器 介绍 REST Builder 提供了一种简单的方法来为新的或现有的 Web 服务开发GraphQL 和 REST API 。 可以通过来自外部系统的 HTTP 请求调用此服务。 将您的服务与 API 解耦使您可以灵活地与不同的前端技术、移动...

    ist的matlab代码-GovDataPortal:GovData-德国开放数据门户

    是的matlab代码文件资料 开放数据平台将各种组件集成到用于开放数据的完整门户解决方案中...Portlet使用,以有效地处理搜索查询并显示带有各种过滤器的搜索结果列表。 当前支持Elasticsearch 1.6.x版本,因为它可用于Ub

    spring源码(2),可直接导入eclipse

    1. **spring-web**: 这个模块是Spring MVC的基础,提供了HTTP和Web集成的支持,包括Servlet监听器、过滤器和控制器。 2. **spring-webmvc-portlet**: 专门针对portlet应用程序的Spring MVC实现,使得在portlet容器...

    Portlets in action

    - **portlet过滤器**:利用portlet过滤器来处理portlet的请求和响应,实现通用逻辑的复用。 - **portlet桥接**:实现portlet与非portlet应用之间的互操作性。 #### 六、最佳实践案例 - **使用用户属性获取用户信息*...

    开源软件在集成化数字图书馆中的开发和应用北京高教学会图书PPT教案.pptx

    CAS的设计理念是简化认证流程,通过部署过滤器,为不同的Web应用程序提供统一的认证服务,增强了系统的安全性,减少了密码管理的成本。在具体实施中,CAS分为Server和Client两个部分,CAS Server独立部署,各个应用...

Global site tag (gtag.js) - Google Analytics