2016-12-29 3 views
0

Я хочу создать функцию «pre». и в этой функции для проверки сеанса, Когда вызывается какая-то функция в контроллере, я хочу, чтобы перед ней вызывается моя функция «pre». и из функции «pre» я передам пользователя на страницу входа в систему или для выполнения этой функции. что-то вроде этого псевдокода:Весна mvc-вызов функции перед функциями контроллера

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

Я видел некоторые решения, чтобы создать эту функцию, но решение было создать его: @ModelAttribute. и проблема в том, что с @ModelAttribute я не нашел способа перейти к другой функции в моем контроллере. Более того, выбранная функция всегда вызывается после моего окончания @ModelAttribute, Как я могу это сделать? есть способ сделать что-то подобное?

+0

посмотреть на [Spring Security] (https://projects.spring.io/spring- безопасность) –

+0

Чтобы вызвать метод перед любым запросом, вы можете использовать перехватчик или Spring AOP. Для действий входа и доступа на основе ролей предлагается использовать Spring Security. –

+0

Да, но я не хочу создавать разрешения для страницы. Все страницы не разрешены без входа в систему, поэтому я решил использовать сеанс, и когда пользователь выйдет из системы - очистите сеанс, – foo

ответ

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> 
+0

вы можете добавить объяснение в ответ? Где мне это нужно? как использовать его в функциях контроллера .... Спасибо! – foo

+0

"chain.doFilter" Что такое цепочка? – foo

+1

Я обновил свой ответ, любезно проверил его и дайте мне знать, если он сработает. – Mitchapp

Смежные вопросы