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>