Redirecting Post Values from Third Party application to Liferay
Whenever we do Post in Liferay, Liferay will auto generate P_auth token.
But whenever we are doing posting(Post Request) from third party application and redirecting to Liferay application , liferay application will expect p_auth token. But third party applications cannot provide p_auth as it is Liferay specific.
But in liferay, we can design to ignore p_auth token for specific URL.
First, Write a below class to ignore Auth token for specific URL
@Component(
immediate = true,
property = {
"auth.token.ignore.mvc.action=true",
"javax.portlet.name=" + SamplePortletKeys.PortletName,
"mvc.command.name=/redirect/liferay"
},
service = MVCActionCommand.class
)
public class RedirectPath extends BaseMVCActionCommand { }
Here we have created MVCActionCommand Class
- auth.token.ignore.mvc.action=true
This Property will ensure to ignore p_auth token.
2. "mvc.command.name=/redirect/liferay"
Here we have specified the property of the URL to ignore p_auth token,
In Redirect class, we have extended BaseMVCActionCommand it means we need to override doProcessAction Method
Second, In Third Party application we need to construct a URL as below to redirect to liferay specific URL.
<form action="http://localhost:8080/web/guest/home?p_p_id=<portlet-name>&p_p_lifecycle=1&<portlet namespace>javax.portlet.action=/redirect/liferay" method="post">
p_p_id should be as portlet name
In MVC Action Command class we have mentioned URL, so same needs to mention in URL as <portlet namespace>javax.portlet.action=/redirect/liferay
p_p_lifecycle=1 means it is of type POST request.
If we didn't mention "auth.token.ignore.mvc.action=true" then we will get as below error
User 0 is not allowed to access URL %s and portlet %s
We can refer SecurityPortletContainerWrapper class for more details. Refer processAction method.
Comments
Post a Comment