SpringMVC-利用filter实现安全登录

安全登录,不同与普通登录。

安全登录是什么呢?就是只要用户名和密码不正确,除了登陆页面,其他页面你进不去,这就是安全登录。

刚开始,用springmvc自带的拦截器试了一下,效果出来了,但是发现了个问题,就是只能拦截到处理器的请求,其他请求不能拦截,比如我在地址栏里输入一个地址,依然可以跳转,这就很不好,为此,我选用了filter过滤器来进行过滤。

代码如下:

首先是过滤器的代码:

public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain chain) throws IOException, ServletException {
	    HttpServletRequest request=(HttpServletRequest) servletrequest;
	    HttpServletResponse response=(HttpServletResponse) servletresponse;
	    String servletPath = request.getServletPath();
	    System.out.println("servletPath"+servletPath);
	    Object session = request.getSession().getAttribute("pro");
		System.out.println("session="+session);
		//只要用户回到登录页面,就把session销毁,这样就需要重新登录
		if(servletPath.contains("/html/login.jsp") || servletPath.contains(" ")){
			System.out.println("销毁session");
			request.getSession().removeAttribute("pro");
		}
		//如果用户没有登录是不能直接进入其他页面的
		if(session != null){
			
			System.out.println("---------放行------------");
			chain.doFilter(request, response);
			
			return;
		}
		else{
			System.out.println("===进入判断体===");
			request.getRequestDispatcher("/html/login.jsp").forward(request, response);
		}
		
	}
再来看web.xml的配置:

 
 
  myfilter
  com.aynu.interceptor.myfilter
 
 
  myfilter
  *.jsp

 

当然,我们可以用init,将/html/login.jsp写进去,在filter获取到再利用,这样在后续维护中会很方便。


这个时候,图片呀什么的可能不能显示,那怎么办呢?

这样,先看在web.xml里的配置:

 
  default
  /css
  /js
  /images
  /jq
  /jquery-3.2.1.js
  /jquery-form.js
 

载看spring-mvc.xml里配置:

   


这个时候,我们想要的功能基本已经实现,没有登录在地址栏无论输入哪个地址,是进不去的,但是问题来了,假如我们用户名密码不存在或者错误呢?依然可以进入,这时候,就需要在处理器中做这样的逻辑了:

	//返回登录页面
	@RequestMapping("/login.do")
	public String login(){
		
		return "/html/login.jsp";
	}
	
	//接收登录信息
	@RequestMapping(value="/some.do",method=RequestMethod.POST)
	@ResponseBody
	public ModelAndView pro(Pro pro,RedirectAttributes re,HttpSession seesion,HttpServletRequest request){
		boolean x=service.selectPro(pro);
		ModelAndView mv = new ModelAndView();
		seesion.setAttribute("pro", pro);
		if(x == false){
			request.getSession().removeAttribute("pro");
			mv.setViewName("redirect:/pro/login.do");
			return mv;
		}
		//mv.addObject("re", "xxx");
		//re.addFlashAttribute("re", "用户名或密码错误");
		mv.setViewName("redirect:/html/index.jsp");
		System.out.println("=====");
		return mv;
	}

OK,效果达到,如果哪位大牛有更好的方法,请在下面留言。

希望我们共同学习和进步。




你可能感兴趣的:(SpringMVC-利用filter实现安全登录)