1、Audit Filter过滤器
<filter>
<filter-name>Audit Filter</filter-name>
<filter-class>com.liferay.portal.servlet.filters.audit.AuditFilter</filter-class>
</filter>
主要代码:
auditRequestThreadLocal.setClientHost(request.getRemoteHost());
auditRequestThreadLocal.setClientIP(request.getRemoteAddr());
auditRequestThreadLocal.setQueryString(request.getQueryString());
HttpSession session = request.getSession();
Long userId = (Long)session.getAttribute(WebKeys.USER_ID);
if (userId != null) {
auditRequestThreadLocal.setRealUserId(userId.longValue());
}
auditRequestThreadLocal.setRequestURL(
request.getRequestURL().toString());
auditRequestThreadLocal.setServerName(request.getServerName());
auditRequestThreadLocal.setServerPort(request.getServerPort());
auditRequestThreadLocal.setSessionID(request.getSession().getId());
把客户端的主机名、IP、查询字符串和服务器端的主机名、端口号、客户访问产生的session、客户的userId放到auditRequestThreadLocal对象中。
2、AutoLoginFilter过滤器
<filter>
<filter-name>Auto Login Filter</filter-name>
<filter-class>com.liferay.portal.servlet.filters.autologin.AutoLoginFilter</filter-class>
</filter>
主要代码:
String remoteUser = request.getRemoteUser();
String jUserName = (String)session.getAttribute("j_username");
String[] credentials = autoLogin.login(request, response);
String redirect = (String)request.getAttribute(
AutoLogin.AUTO_LOGIN_REDIRECT);
if (Validator.isNotNull(redirect)) {
response.sendRedirect(redirect);
return;
}
String loginRemoteUser = getLoginRemoteUser(
request, response, session, credentials);
if (loginRemoteUser != null) {
request = new ProtectedServletRequest(
request, loginRemoteUser);
if (PropsValues.PORTAL_JAAS_ENABLE) {
return;
}
redirect = (String)request.getAttribute(
AutoLogin.AUTO_LOGIN_REDIRECT_AND_CONTINUE);
if (Validator.isNotNull(redirect)) {
response.sendRedirect(redirect);
break;
}
}
取得登陆的用户信息,如果用户信息正确,自动跳转到登陆页面,为空则重定向。
3、Cache Filter - Friendly过滤器
<filter>
<filter-name>Cache Filter - Friendly</filter-name>
<filter-class>com.liferay.portal.servlet.filters.cache.CacheFilter</filter-class>
<init-param>
<param-name>pattern</param-name>
<param-value>0</param-value>
</init-param>
</filter>
参数pattern:0、PATTERN_FRIENDLY;1、PATTERN_LAYOUT;2、PATTERN_RESOURCE
主要代码:
request.setAttribute(SKIP_FILTER, Boolean.TRUE);
String key = getCacheKey(request);
long companyId = PortalInstances.getCompanyId(request);
CacheResponseData cacheResponseData =
CacheUtil.getCacheResponseData(companyId, key);
if (cacheResponseData == null) {
if (!isCacheableData(companyId, request)) {
if (_log.isDebugEnabled()) {
_log.debug("Request is not cacheable " + key);
}
processFilter(
CacheFilter.class, request, response, filterChain);
return;
}
if (_log.isInfoEnabled()) {
_log.info("Caching request " + key);
}
StringServletResponse stringResponse =
new StringServletResponse(response);
processFilter(
CacheFilter.class, request, stringResponse, filterChain);
cacheResponseData = new CacheResponseData(stringResponse);
LastPath lastPath = (LastPath)request.getAttribute(
WebKeys.LAST_PATH);
if (lastPath != null) {
cacheResponseData.setAttribute(WebKeys.LAST_PATH, lastPath);
}
// Cache the result if and only if there is a result and the
// request is cacheable. We have to test the cacheability of a
// request twice because the user could have been authenticated
// after the initial test.
if (isCacheableRequest(request) &&
isCacheableResponse(stringResponse)) {
CacheUtil.putCacheResponseData(
companyId, key, cacheResponseData);
}
}
else {
LastPath lastPath = (LastPath)cacheResponseData.getAttribute(
WebKeys.LAST_PATH);
if (lastPath != null) {
HttpSession session = request.getSession();
session.setAttribute(WebKeys.LAST_PATH, lastPath);
}
}
CacheResponseUtil.write(response, cacheResponseData);
首先判断是否支持缓存,如果支持,判断缓存中是否有数据,如果有数据直接把数据写到response中,如果没有,判断有没有companyId,如果有,从response中取数据过滤,最后放到cacheResponseData中。
4、Double Click Filter过滤器
<filter>
<filter-name>Double Click Filter</filter-name>
<filter-class>com.liferay.portal.servlet.filters.doubleclick.DoubleClickFilter</filter-class>
</filter>
主要代码:
DoubleClickController controller = null;
synchronized (session) {
controller = (DoubleClickController)session.getAttribute(
_CONTROLLER_KEY);
if (controller == null) {
controller = new DoubleClickController();
session.setAttribute(_CONTROLLER_KEY, controller);
}
}
如果属性com.liferay.filters.doubleclick.DoubleClickFilter=true,则处理在服务器端阻止鼠标双击。
5、ETag Filter过滤器
<filter>
<filter-name>ETag Filter</filter-name>
<filter-class>com.liferay.portal.servlet.filters.etag.ETagFilter</filter-class>
<init-param>
<param-name>url-regex-ignore-pattern</param-name>
<param-value>.+/-/.+</param-value>
</init-param>
</filter>
主要代码:
boolean etag = ParamUtil.getBoolean(request, _ETAG, true);
if (etag) {
StringServletResponse stringResponse =
new StringServletResponse(response);
processFilter(
ETagFilter.class, request, stringResponse, filterChain);
if (!ETagUtil.processETag(request, response, stringResponse)) {
ServletResponseUtil.write(response, stringResponse);
}
}
else {
processFilter(ETagFilter.class, request, response, filterChain);
}
ETag Filter是一个servlet过滤器,是用来帮助判断服务器端的有没有跟新,即刷新页面时判断是否需要更新缓存。
6、Fragment Filter过滤器
主要代码:
if (isFragment(request, response) && !isAlreadyFiltered(request)) {
request.setAttribute(SKIP_FILTER, Boolean.TRUE);
if (_log.isDebugEnabled()) {
String completeURL = HttpUtil.getCompleteURL(request);
_log.debug("Fragmenting " + completeURL);
}
StringServletResponse stringServerResponse =
new StringServletResponse(response);
processFilter(
FragmentFilter.class, request, stringServerResponse,
filterChain);
String content = getContent(
request, stringServerResponse.getString());
ServletResponseUtil.write(response, content);
}
else {
if (_log.isDebugEnabled()) {
String completeURL = HttpUtil.getCompleteURL(request);
_log.debug("Not fragmenting " + completeURL);
}
processFilter(FragmentFilter.class, request, response, filterChain);
}
protected String getContent(HttpServletRequest request, String content) {
String fragmentId = ParamUtil.getString(request, "p_f_id");
int x = content.indexOf("<!-- Begin fragment " + fragmentId + " -->");
int y = content.indexOf("<!-- End fragment " + fragmentId + " -->");
if ((x == -1) || (y == -1)) {
return content;
}
x = content.indexOf(">", x);
return content.substring(x + 1, y);
}
把response里面的portalet产生的内容,也被称为片段 (fragment),进行过滤(即把头和尾去掉),然后写到response中
分享到:
相关推荐
在Liferay中,这通常通过服务建设器(Service Builder)来实现,这是一个工具,可以帮助开发者自动生成数据库表、服务接口、服务实现以及相应的DAO(数据访问对象)。通过配置service.xml文件,你可以定义数据模型,...
Liferay HTTPS Servlet请求过滤器挂钩 当您有一个损坏的设置(其中HTTPS在Liferay前面的LB或Apache处终止)但应用程序服务器不知道请求是通过https服务并且不会生成正确的URL时,此筛选器挂钩可与Liferay一起使用。 ...
`<liferay-ui:search-container>` 标签是Liferay中最强大的UI标签之一,它提供了一个完整的搜索界面,包括过滤器、排序、分页等功能。开发者只需要提供数据源和字段定义即可。 ### 示例和代码 在实际应用中,这些...
通过配置搜索容器,可以定义搜索字段、过滤器、排序方式以及结果的展示样式。 在实际开发中,理解并熟练使用这些标签对于创建高效、易用的Liferay应用至关重要。Liferay的搜索容器尤其值得深入研究,因为它集成了...
在Liferay中配置LDAP需要设置LDAP的各个参数,如服务端口、搜索过滤器等,并且要确保Liferay服务器能够正确地连接到LDAP服务器。在Liferay 7.x及更高版本中,系统管理界面有专门的LDAP选项用于配置,可以将Liferay的...
它提供了一种声明式的方式来创建带有过滤、排序和分页功能的搜索界面。开发者只需要定义数据源、搜索字段和结果渲染方式,剩下的工作由Search Container自动完成。这极大地提高了开发效率,并保持了界面的一致性。 ...
Servlet过滤器(使用Liferay的Servlet过滤器钩子)拦截正常的登录流并重定向到OpenID Connect提供程序,获取访问令牌并获取用户信息 自动登录以完成身份验证 配置 配置在6.2和DXP / 7.0 +之间有所不同。 对于DXP / ...
一个非常简单的自动登录示例,用于演示servlet过滤器和liferay中的自动登录的工作方式。 它带有一个nodejs服务器,该服务器拦截对liferay的http调用并将“ iv-user”注入到http标头中,就像webseal一样。 自动登录...
web.xml 文件是 Web 应用程序的部署描述文件,用于配置 Servlet、过滤器等组件。 ##### 2.6.2 portlet.xml portlet.xml 文件用于描述 Portlet 的元数据,包括 Portlet 的名称、版本、配置参数等信息。 ##### 2.6.3...
Liferay Solr 教程是针对企业级内容管理和搜索解决方案的一份详细指南,主要聚焦于如何在 Liferay 平台上集成和优化 Apache Solr 搜索引擎。Apache Solr 是一个开源、高性能、可扩展的全文搜索引擎,广泛应用于各种...
而ntlmv2-auth库就是基于Liferay Portal对JCIFS的扩展进行开发的,它提供了更方便的API和过滤器,使得Java开发者能够在自己的应用中实现NTLMv2身份验证。 在实际应用中,"ntlmv2-auth"库可以被集成到各种Java应用中...
例如,web.xml是Web应用的部署描述符,可能包含了Portlet的配置信息,如初始化参数和过滤器等。 综上所述,这个项目主要教授如何在Liferay Portal中利用Java和JDBC技术开发Portlet。开发者将学习到如何创建JSP页面...
- **过滤器模式**:介绍Portlet过滤器的作用和工作原理,以及如何利用过滤器模式来提高代码的复用性。 - **过滤器应用案例**:提供具体的案例,展示如何利用Portlet过滤器实现常见功能,如日志记录、安全性检查等。 ...
生成器 介绍 REST Builder 提供了一种简单的方法来为新的或现有的 Web 服务开发GraphQL 和 REST API 。 可以通过来自外部系统的 HTTP 请求调用此服务。 将您的服务与 API 解耦使您可以灵活地与不同的前端技术、移动...
1. **spring-web**: 这个模块是Spring MVC的基础,提供了HTTP和Web集成的支持,包括Servlet监听器、过滤器和控制器。 2. **spring-webmvc-portlet**: 专门针对portlet应用程序的Spring MVC实现,使得在portlet容器...
CAS的设计理念是简化认证流程,通过部署过滤器,为不同的Web应用程序提供统一的认证服务,增强了系统的安全性,减少了密码管理的成本。在具体实施中,CAS分为Server和Client两个部分,CAS Server独立部署,各个应用...
是的matlab代码文件资料 开放数据平台将各种组件集成到用于开放数据的完整门户解决方案中...Portlet使用,以有效地处理搜索查询并显示带有各种过滤器的搜索结果列表。 当前支持Elasticsearch 1.6.x版本,因为它可用于Ub
- **portlet过滤器**:利用portlet过滤器来处理portlet的请求和响应,实现通用逻辑的复用。 - **portlet桥接**:实现portlet与非portlet应用之间的互操作性。 #### 六、最佳实践案例 - **使用用户属性获取用户信息*...