非登录访问请求的拦截

需求介绍

1.在未登录情况下,访问网站其他界面时强制跳转至网站登录页

通过拦截器实现请求拦截
方式一:实现HandlerInterceptor接口
package com.yuebai.finance.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;

import com.yuebai.finance.bean.User;
import com.yuebai.finance.util.Const;

/**
 * 
 * @ClassName: LoginInterceptors  
 * @Description: 通过实现HandlerInterceptor接口,实现拦截  
 * @author yanqinghai  
 * @date 2020年8月6日
 */
public class LoginInterceptors implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		HttpSession session = request.getSession(true);
		User user = (User)session.getAttribute(Const.LOGIN_USER);
		if (user == null) { //未登录
			response.sendRedirect(request.getContextPath()+"login.htm");
			return false;
		} else { //登录
			return true;
		}
		
	}

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

	}

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

	}

}
方式二:继承HandlerInterceptorAdapter实现类
package com.yuebai.finance.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.yuebai.finance.bean.User;
import com.yuebai.finance.util.Const;

/**
 * 
 * @ClassName: LoginInterceptor  
 * @Description: 继承exends HandlerInterceptorAdapter 对方法进行重写
 * @author yanqinghai  
 * @date 2020年8月6日
 */
public class LoginInterceptor extends HandlerInterceptorAdapter {
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		//获取session域中的对象
		//true,表示将之前分配过的session返回,如果没有分配过,那么就会创建一个新的返回
		//false,表示将之前分配过的session返回,如果没有分配过,那么就会返回null
		HttpSession session = request.getSession(true);
		User user = (User)session.getAttribute(Const.LOGIN_USER);
		if (user == null) { //session中没有登录信息
			//重定向到登录页面
			response.sendRedirect(request.getContextPath()+"/login.htm");
			return false;
		}else { //session域中存在登录信息
			return true;
		}
	}
}
在springmvc-context.xml文件中配置拦截器
	<mvc:interceptors>
    	<mvc:interceptor>
    		<!-- 拦截所有请求 -->
    		<mvc:mapping path="/**"/>
    		<!-- 白名单,排除拦截 -->
    		<mvc:exclude-mapping path="index.htm"/>
    		<mvc:exclude-mapping path="login.htm"/>
    		<mvc:exclude-mapping path="dologin.do"/>
    		<bean id="loginInterceptor" class="com.yuebai.finance.interceptor.LoginInterceptor"></bean>
    	</mvc:interceptor>
    </mvc:interceptors>
在配置拦截器时遇到的问题:cvc-complex-type.2.4.a: Invalid content was found starting with element ‘bean’. One of ‘{“http://www.springframework.org/schema/mvc”:mapping}’ is expected.
解决办法:
<!-- 错误代码!!!!!!! -->
<mvc:interceptors>
    	<mvc:interceptor>
    	<bean id="loginInterceptor" class="com.yuebai.finance.interceptor.LoginInterceptor"></bean>
    		<!-- 拦截所有请求 -->
    		<mvc:mapping path="/**"/>
    		<!-- 白名单,排除拦截 -->
    		<mvc:exclude-mapping path="index.htm"/>
    		<mvc:exclude-mapping path="login.htm"/>
    		<mvc:exclude-mapping path="dologin.do"/>
    	</mvc:interceptor>
    </mvc:interceptors>


<!-- 改正后的正确代码!!!!!!!!!
	1.修改了<bean></bean>标签的书写位置,放到最后位置
 -->
<mvc:interceptors>
    	<mvc:interceptor>
    		<!-- 拦截所有请求 -->
    		<mvc:mapping path="/**"/>
    		<!-- 白名单,排除拦截 -->
    		<mvc:exclude-mapping path="index.htm"/>
    		<mvc:exclude-mapping path="login.htm"/>
    		<mvc:exclude-mapping path="dologin.do"/>
    		<bean id="loginInterceptor" class="com.yuebai.finance.interceptor.LoginInterceptor"></bean>
    	</mvc:interceptor>
    </mvc:interceptors>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值