java - RenderRequest 上的协议(protocol)重定向

标签 java spring spring-mvc portlet spring-portlet-mvc

我正在开发一个在 Liferay Portal 服务器上使用 Spring Portlet-MVC 框架和 Velocity 的项目。对于一些页面,我们需要通过安全连接为它们提供服务。由于对 Portlet 相当陌生,我想出了链接到操作方法并从那里重定向的解决方案。

@ActionMapping(params = "command=secureRedirect")
public void actionSecureRedirect(ActionRequest request, ActionResponse response) {
    HttpServletRequest servletRequest = PortalUtil.getHttpServletRequest(request);
    String absoluteUrl = servletRequest.getRequestURL().toString();
    String[] urlComponents = StringUtils.split(absoluteUrl, '/');
    StringBuffer redirectUrl = new StringBuffer("https://");
    redirectUrl.append(urlComponents[1]);
    redirectUrl.append("<specificPath>");
    response.sendRedirect(redirectUrl.toString());
}

我的解决方案有效,但对我来说它似乎不太好。我想知道是否有人可以想出另一种更透明的方法来做到这一点(也许在渲染映射上使用拦截器和注释?)。

如有任何建议,我们将不胜感激!

最佳答案

某些页面是指 Liferay 页面,还是您只关心当用户单击 portlet 中的某些链接时生成的 url。

如果您想让 portlet 的某些链接安全,那么请使用 liferay-portlet 风格或 renderURL 或 actionURL。它有一个名为 secure 的属性,如果设置为 true 将使您的 url 以 https 开头

如果你正在寻找一些liferay页面(例如/web/guest/mypage)来确保安全,那么它就是一种黑客行为,我不会向任何人建议这样做,但如果你没有其他选择,你可以创建一个服务预 Hook 并检查您关心的 url 模式并重定向到该 url 的 https 版本。

关于java - RenderRequest 上的协议(protocol)重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9818967/

相关文章:

hibernate - 冲洗模式只能使用一次吗?

spring - Struts2中的文件上传以及Spring CSRF token

java - 返回并转换 ResponseEntity<List<T>>

java - 文件问题

java - Liquibase 为 postgres 创建架构

spring - 来自 spring 应用程序的数据未保存在 dockerized Postgres 数据库中

java - 分享一个 Spring MVC 项目

java - 带有泛型的命令对象

java - 为什么 null 不等于 null?

java - WildFly:来自远程客户端的 EJB 调用