2014-10-10 4 views
0

spring mvc를 사용하고 있습니다. 요격을 가로 채려면 내가 그것에 서블릿 필터를 사용하고 있습니다. "login.jsp"를 통해 사용자를 인증하려고합니다.서블릿 필터가 제대로 작동하지 않습니다.

@WebFilter(urlPatterns={"/*"}) 
public class MyFilter implements Filter { 


private ServletContext context; 


public MyFilter() { 
    // TODO Auto-generated constructor stub 
} 


public void destroy() { 
    // TODO Auto-generated method stub 
} 


public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

    HttpServletRequest request1 = (HttpServletRequest)request; 
    HttpServletResponse response1 = (HttpServletResponse)response; 
    HttpSession session = request1.getSession(false); 

    String uri = request1.getRequestURI(); 

    if((session==null || session.getAttribute("users")==null)&& (!uri.endsWith("login.jsp") && !uri.endsWith("record/authenticate"))){ 
      request1.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request1, response1); 
    } 
    else{ 
     chain.doFilter(request,response); 
    } 
} 


public void init(FilterConfig fConfig) throws ServletException { 
    this.context = fConfig.getServletContext(); 
} 

} 

내 컨트롤러 :

@Controller 

@RequestMapping("/record") 
public class MainController { 

@Resource(name="userService") 
private UserService userService; 

@Resource(name="roleService") 
private RoleService roleService; 



@RequestMapping(value="/login") 
public String GetFront(Model model){ 
    return "login"; 
} 

@RequestMapping(value="/authenticate",method = RequestMethod.POST) 
public String authenticate(@RequestParam("uname")String userName,@RequestParam("pass")String password, 
     HttpSession session,HttpServletRequest request,Model model){ 

    boolean success = userService.validate(userName,password); 
    User user = userService.getuserByName(userName); 
    Set<Role> roles = user.getRole(); 
    //String role = null; 
    /* 
    for (Role role1: roles) {   
     if(role1.getRoleName().equalsIgnoreCase("admin")){ 
      role = "admin"; 
     }   
    } 
    */ 
    if(success){ 
     session = request.getSession(); 
     session.setAttribute("users",userName); 
     session.setAttribute("role", roles); 
     return "Hello"; 
    } 
    else{ 
     return "error"; 
    } 

} 

}

i는 사용자 이름과 암호를 입력하고 다시 을 it.It를 제출할 때까지 "의 login.jsp"

내 서블릿 필터 나 지시

내 web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5"> 
<display-name>Project1</display-name> 
<servlet> 
<servlet-name>spring</servlet-name> 
<servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>spring</servlet-name> 
<url-pattern>/</url-pattern> 
</servlet-mapping> 

<filter> 
<filter-name>MyFilter</filter-name> 
<filter-class>Filter.MyFilter</filter-class> 
</filter> 


<filter-mapping> 
<filter-name>MyFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

</web-app> 

답변

0

로그인 양식에 일부 입력을 입력하여 제출하면 다음 페이지 나 서블릿으로 이동하기 위해 사용자의 세션 속성이 null이기 때문에 필터 자체에 세션 속성을 설정해야합니다. 그것이 귀하의 로그인 페이지에서 반복되는 이유입니다.

관련 문제