1

我正在使用 liferay 6.1.1.ga2 社区版。

我有一个自定义 portlet,其中有保险申请表。

现在使用 postLogin(login hook) 我可以在他登录后重定向到这个保险申请页面。

public void run(HttpServletRequest request, HttpServletResponse response)
        throws ActionException {

 long usersId = PortalUtil.getUserId(request);
User u=UserLocalServiceUtil.getUser(usersId);

 Role role = RoleLocalServiceUtil.getRole(u.getCompanyId(),
                        "Not Insured");

 if(!RoleLocalServiceUtil.hasUserRole(u.getUserId(),role.getRoleId())){


response.sendRedirect("/group/secure/insuranceForm");

}
}

这对我来说很好。但是假设如果用户尝试更改 url(输入的应用程序其他 url)并点击,它会重定向到不应该的 url。

意味着我想在他完成之前让用户继续使用保险申请。与我们在密码屏幕、提醒 *问题* 屏幕或同意*页面* 用户首次登录时看到的相同功能。

我想为我的保险申请页面执行相同的操作。我怎样才能做到这一点?我正在使用liferay 6.1.1。

我已经尝试使用 PortalRequestProcessor.java 文件为此制作了一个 ext 插件。

由于我们有一个受保护的 String processPath(HttpServletRequest request, HttpServletResponse response){} 方法,所以我也应用了我的条件并尝试以这种方式返回静态字符串,这不过是我的保险表单页面。

if (!RoleLocalServiceUtil.hasUserRole(user.getUserId(),roles.getRoleId()) {

                return _PATH_INSURANCE_FORM;
            }



.....

//static variables declaration

private static final String _PATH_PORTAL_LOGOUT = "/portal/logout";
private static final String _PATH_INSURANCE_FORM =
            "/group/app/insurance?insurances=insuranceform";

但它显示错误为

内容编码错误 您尝试查看的页面无法显示,因为它使用了无效或不受支持的压缩形式。

并在日志级别显示:

ERROR [http-bio-8080-exec-9][RequestProcessor:676] Invalid path was requested /group/app/insurance?insurances=insuranceform
ERROR [http-bio-8080-exec-9][PortalRequestProcessor:550] User ID 16040

    And at browser console it's showing "NetworkError: 404 Not Found - http://189.0.25.23:8080/group/app/insurance?insurances=insuranceform"

但是,如果我用现有路径(例如:_PATH_PORTAL_LOGOUT)替换返回路径,那么它会正确注销用户。

我也在检查 LoginPostAction(login-hook) 相同的条件并重定向到保险页面。

这些静态字符串变量声明的地方是不是在不同的地方?

那么有人可以告诉我如何克服这个问题吗?

谢谢,

4

0 回答 0