There must be some way to check that the current session is valid or invalid. This can be done using interceptors in struts in a very easy way.
Here I am giving an example how to resolve this.
First of all we will make an interceptor named SessionCheck.java.
package com.demo.interceptors; import java.util.Collections; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.interceptor.Interceptor; public class SessionCheck implements Interceptor { public void init() { } public void destroy() { } public String intercept(ActionInvocation invocation) throws Exception { ActionProxy proxy; proxy = invocation.getProxy(); Map session = ActionContext.getContext().getSession(); Map results = proxy.getConfig().getResults(); // We are checking that the user that is set at login time is null or // not if (session.get("user") != null) { return invocation.invoke(); } else { // Here we are passing the result to an invalid page by specifying // its location ResultConfig rc = new ResultConfig("invalid", "org.apache.struts2.views.freemarker.FreemarkerResult", Collections.singletonMap("location", "/com/demo/interceptors/invalid.jsp")); results.put("invalid", rc); return "invalid"; } } }Now in struts.xml put the following code
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> ... ... <interceptors> <interceptor name="SessionCheck" class="com.demo.interceptors.SessionCheck" /> </interceptors> <!-- We are using this because we want it to apply for each and every action --> <default-interceptor-ref name="SessionCheck" /> ... ... </struts>
Can't we have the path to "invalid" configured in struts.xml or some other configuration file, instead of hard - coding in the interceptor/
ReplyDeleteHi,
ReplyDeletethank you for this solution. But when I am using this the values in the getter are getting as null in the action. Do you know why it is happening like this.
Im also getting null value in getter inside the action
ReplyDeleteAny one can give a solution for the above null value problem?
ReplyDeleteNope, I'm unable to get anything out of the session either... no idea why.
ReplyDeletehi, i'm getting upsupportedoperation exception if the session is null
ReplyDeleteMaybe it works with this
ReplyDelete---
final ActionContext context = invocation.getInvocationContext ();
HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
HttpSession session = request.getSession (true);
---
instead
---
Map session = ActionContext.getContext().getSession();
---
ActionContext context = actionInvocation.getInvocationContext();
DeleteHttpServletRequest request = (HttpServletRequest) context.get(StrutsStatics.HTTP_REQUEST);
HttpSession session = request.getSession (true);
Hi,
ReplyDeleteAm new to java.Could u please post a simple program in stuts using logging filter.