Это легко сделать с помощью Spring Security. Но что, если я не использую Spring Security и хочу перенаправить пользователя на страницу входа с сообщением «Сессия истекла» в Spring MVC.
Есть ли у Spring какой-либо конкретный метод для этого?
Это легко сделать с помощью Spring Security. Но что, если я не использую Spring Security и хочу перенаправить пользователя на страницу входа с сообщением «Сессия истекла» в Spring MVC.
Есть ли у Spring какой-либо конкретный метод для этого?
Да, вы можете сделать это, используя следующий фрагмент. Попробуйте включить эти строки в заголовок страницы. И замените атрибут пользователя в соответствии с объектом сеанса пользователя.
HttpSession session = request.getSession("User");
if(session != null && !session.isNew()) {
//do something here
} else {
response.sendRedirect("/redirect_the_page.jsp");
}
Наконец решено.
Я добавил фильтры в web.xml.
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>
com.java.util.SessionFilter
</filter-class>
<init-param>
<param-name>avoid-urls</param-name>
<param-value>/firstPage.htm</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
Затем создал класс фильтра
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class SessionFilter implements Filter {
private ArrayList<String> urlList;
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String url = request.getServletPath();
boolean allowedRequest = false;
if (urlList.contains(url)) {
allowedRequest = true;
}
if (!allowedRequest) {
HttpSession session = request.getSession(false);
if (null == session) {
response.sendRedirect("startup.jsp");
} else {
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}
}
public void init(FilterConfig config) throws ServletException {
String urls = config.getInitParameter("avoid-urls");
StringTokenizer token = new StringTokenizer(urls, ",");
urlList = new ArrayList<String>();
while (token.hasMoreTokens()) {
urlList.add(token.nextToken());
}
}
}
Обратите внимание, что я выполнил эту строку «chain.doFilter (запрос, ответ);» только когда сессия активна. В противном случае будет выдано исключение "java.lang.IllegalStateException: невозможно переслать после того, как ответ был зафиксирован"