SpringMVC-利用filter实现安全登录

本文探讨了如何在SpringMVC应用中实现安全登录,通过使用过滤器Filter来确保只有登录用户才能访问除登录页面以外的其他页面。在介绍中,指出了SpringMVC自带拦截器的局限性,并提供了Filter的实现代码以及在web.xml中的配置方法。为了解决登录验证失败仍能访问的问题,文章建议在处理器中加入相应的逻辑判断。
摘要由CSDN通过智能技术生成

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

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

刚开始,用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的配置:

 <!-- 注册自定义过滤器,实现安全登录 -->
 <filter>
  <filter-name>myfilter</filter-name>
  <filter-class>com.aynu.interceptor.myfilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>myfilter</filter-name>
  <url-pattern>*.jsp</url-pattern>

 </filter-mapping>

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


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

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

 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/css</url-pattern>
  <url-pattern>/js</url-pattern>
  <url-pattern>/images</url-pattern>
  <url-pattern>/jq</url-pattern>
  <url-pattern>/jquery-3.2.1.js</url-pattern>
  <url-pattern>/jquery-form.js</url-pattern>
 </servlet-mapping>

载看spring-mvc.xml里配置:

   <mvc:default-servlet-handler/>


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

	//返回登录页面
	@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,效果达到,如果哪位大牛有更好的方法,请在下面留言。

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




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值