登录拦截器

一般来说,我们在进行一些操作的时候,顺序为:我们需要先登录,登录后才可以进行一些操作;当我们隔一段时间未操作后,存储在session的信息过期后,则需要重新进行登录才可以进行后续的操作;

所以当我们每次进行操作的时候,都要进行判断用户是否是有登录;如果在每块接口前面都写这块的判断就比较复杂繁琐,并且后续进行修改的时候,也会比较复杂;所以一般来说,我们会通过拦截器的方式,对我们需要加上判断的接口进行拦截;

登录拦截器配置:

1、首先,我们需要写一个拦截器。这个拦截器的类需要实现HandlerInterceptor;并且重写他的三个方法;登录拦截器的话,主要是在他的pre进行判断,也就是进入接口时,先进行判断session中有没有登入的信息,如果没有的话,就直接抛异常或者是跳转至登录界面;如果判断session有信息,则往下走

package com.cmj.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class LoadLanjieqi implements HandlerInterceptor {

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("你到拦截器了");
		HttpSession session = request.getSession();
		Object student = session.getAttribute("student");

		if (student==null) {
			System.out.println("未登录"+session.getId());
			throw new Exception("还没登录,请及时登录");
		}
		System.out.println(session.getId());
		return true;
	}

}

拦截器写好之后,我们就要进行配置;这边我们要注意的是,我们不能把登录的接口也被我们上面的拦截器所拦截;如果被拦截的话,我们会发现,程序会进入一个死循环,也就是,我都还没登入的时候,这个时候我想去登入,但是这个时候登录的接口被拦截器拦住,他一直判断我之前没有登录,又叫我去登录;所以进入了一个死循环的状态;所以这个时候,我们在进行配置的时候,需要将登录的接口给排除掉

        在我之前的配置SpringMvc扫描组件的配置文件下进行配置:MyServlet.xml中进行配置

  <mvc:interceptors>


    <!-- 配置2个拦截器 -->
    <mvc:interceptor>
        <mvc:mapping path="/student/**"/>
        <!--在使用通配符的过程中 排除指定拦截 -->
			<mvc:exclude-mapping path="/student/loading"/>
        <bean class="com.cmj.interceptor.LoadLanjieqi"/>
    </mvc:interceptor>

通过exclude-mapping path="/xx/xx"/排除掉不需要被拦截的端口;

3、在各个请求进行对应的session获得

下方我们就以登录的loading入口,我们如何在登录后,把对应的数据写入到session;

        通过    req.getSession().setAttribute("student", "xiaoming")这边后面可以传入一个student的对象;这样就可以把相关内容写入到session中;后续如果有出现修改相关内容时,我们也需要同步至session中

@PostMapping("/loading")//登陆接口
	public String postStudent(@RequestBody String name ,HttpServletRequest req,HttpServletResponse res) {
//往session中放对应的数据
		req.getSession().setAttribute("student", "xiaoming");
		System.out.println(req.getSession().getId());
		System.out.println(name);
		return null;

	}

	//新增学生
		@PostMapping("/postStudent11")//插入学生
		public String postStudent11(@RequestBody Student student,HttpServletRequest req,HttpServletResponse res) {
			System.out.println(student);
			System.out.println(req.getSession().getId());
			return "success";

		}

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值