我想创建" pre"功能。并在此功能中检查会话, 当调用控制器中的某些功能时,我希望我的" pre"函数将在它之前调用。并且来自" pre"函数我将用户传递给logIn页面或执行该功能。 像这样的伪代码:
if(!session)
return "redirect:login";
else
//calling to the selected function,
我看到了一些创建此功能的解决方案,但解决方案是通过以下方式创建它:@ModelAttribute
。问题是@ModelAttribute
我没有找到任何方法传递给我的控制器中的另一个函数。
不仅如此,在@ModelAttribute
完成后总是调用所选函数,
我怎样才能做到这一点?有办法做这样的事情吗?
答案 0 :(得分:2)
您可以使用servlet Filter
来实现这一目标。这是一段代码:
import java.io.IOException;
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 RestrictionFilter implements Filter {
private static final String ACCES_PUBLIC = "/loginPage.jsp";
private static final String ATT_SESSION_USER = "user";
public void init( FilterConfig config ) throws ServletException {
}
public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException,
ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
final HttpSession session = request.getSession();
/**
* check if user is not connected.
*/
if (session.getAttribute( ATT_SESSION_USER ) == null) {
/* Redirection to login page */
response.sendRedirect( request.getContextPath() + ACCES_PUBLIC );
} else {
/** access granted for the user*/
chain.doFilter( request, response );
}
}
public void destroy() {
}
}
然后将过滤器添加到您的web.xml
,如下所示:
<filter>
<filter-name>RestrictionFilter</filter-name>
<filter-class>yourPackage.RestrictionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RestrictionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>