我正在使用 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) 相同的条件并重定向到保险页面。
这些静态字符串变量声明的地方是不是在不同的地方?
那么有人可以告诉我如何克服这个问题吗?
谢谢,