在调用控制器函数之前调用spring mvc-function

时间:2016-12-29 08:29:27

标签: java spring session model-view-controller controller

我想创建" pre"功能。并在此功能中检查会话, 当调用控制器中的某些功能时,我希望我的" pre"函数将在它之前调用。并且来自" pre"函数我将用户传递给logIn页面或执行该功能。 像这样的伪代码:

if(!session)
   return "redirect:login";
else
   //calling to the selected function,

我看到了一些创建此功能的解决方案,但解决方案是通过以下方式创建它:@ModelAttribute。问题是@ModelAttribute我没有找到任何方法传递给我的控制器中的另一个函数。 不仅如此,在@ModelAttribute完成后总是调用所选函数, 我怎样才能做到这一点?有办法做这样的事情吗?

1 个答案:

答案 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>