SpringMVC-Interceptor拦截Session登录

背景:

开发的项目都须要账号password登录才干够查看站点的内容,所以我们设计时须要考虑,用户进入站点仅仅能从一个我们设计的规范通道进入即通过注冊的账号password登录,其它方法都是非法的和不同意的,所以我们就要对非法的訪问进行拦截并跳转到用户登录页面。

这里主要是讲SpringMVC拦截器Interceptor的相关配置和介绍。

首先新建一个自己定义的拦截器:

LoginInterceptor.java

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

import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.sgcc.uds.fs.client.UserToken;

/**
 * @author lyx
 *
 * 2015-8-17上午9:53:23
 *
 *
 *登录拦截器
 */
public class LoginInterceptor implements HandlerInterceptor {

	//日志
	protected Logger log = Logger.getLogger(getClass());

	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object handle) throws Exception {

		//创建session
		HttpSession session =request.getSession();

		//无需登录。同意訪问的地址
		String[] allowUrls =new String[]{"/toLogin","/login"};

		//获取请求地址
		String url =request.getRequestURL().toString();

		//获得session中的用户
		UserToken user =(UserToken) session.getAttribute("userToken");

		for (String strUrl : allowUrls) {
			if(url.contains(strUrl))
			{
				return true;
			}
		}

		if(user ==null)
		{
			throw new UnLoginException("您尚未登录!

");	

		}
		//重定向
		//response.sendRedirect(request.getContextPath()+"/toLogin");

			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

	}

}

新建一个登录失败异常类:

(注:也能够不建这个类直接在拦截器中进行重定向)

UnLoginException.java

import java.io.IOException;

/**
 * @author lyx
 *
 * 2015-8-17上午10:57:24
 *
 *fs-config-web.com.sgcc.uds.fs.config.web.interceptor.UnLoginException
 *登录失败异常类
 */
public class UnLoginException extends Exception{

	/**
	 *
	 */
	private static final long serialVersionUID = 1L;

	public UnLoginException() {
		super();
		// TODO Auto-generated constructor stub
	}

	public UnLoginException(String message) throws IOException {
		super(message);
		// TODO Auto-generated constructor stub
	}

}

SpringMVC配置文件:

ApplicationContext-config-web.xml

	<!-- 拦截器 -->
	<mvc:interceptors>
		 <mvc:interceptor>
		 	<!-- 拦截所有地址 -->
			<mvc:mapping path="/**"/>
			<!-- 登录拦截类 -->
			<bean id="loginInterceptor" class="com.sgcc.uds.fs.config.web.interceptor.LoginInterceptor">
			</bean>
		 </mvc:interceptor>
	</mvc:interceptors>

	<!-- 异常 -->
	  <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
      <property name="exceptionMappings">
        <props>
        	<登录失败异常类>
          <prop key="com.sgcc.uds.fs.config.web.interceptor.UnLoginException">redirect:/toLogin</prop>
        </props>
      </property>
    </bean>  

LoginController.java

import java.util.Map;

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.sgcc.uds.fs.client.UserToken;
import com.sgcc.uds.fs.config.web.util.ResultUtil;

@Controller
public class LoginController {

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String welcome(HttpServletRequest request){
		 //TODO 推断有无session,有直接到首页
		if(request.getSession().getAttribute("userToken")!=null)
		{
			return "/index";
		}

		 return "login";
	}
	@RequestMapping(value = "/toLogin", method = RequestMethod.GET)
	public String toLogin(HttpServletRequest request){

		 //TODO 推断有无session。有直接到首页
		if(request.getSession().getAttribute("userToken")!=null)
		{
			return "/index";
		}

		 return "login";
	}

	@RequestMapping(value = "/login", method = RequestMethod.POST)
	@ResponseBody
	public Map<String, Object> login(@RequestParam(required=true,value="loginName") String loginName, @RequestParam(required=true,value="pwd") String pwd,HttpServletRequest request){
		ResultUtil result = new ResultUtil();
		try
		{
			if(null != loginName && loginName.equals("admin") && null != pwd && pwd.equals("admin") ){
				//TODO 登陆成功,保存session

				HttpSession session =request.getSession();

				UserToken userToken =new UserToken("admin","admin", "bucketName");

				session.setAttribute("userToken",userToken);

				//设置超时无效
				//session.setMaxInactiveInterval(20);

			}else{
				result.setSuccess(false);
				result.setMsg("username或password错误!");
			}

		} catch (Exception e)
		{
			result.setSuccess(false);
			result.setMsg("系统内部异常!");
		}
		return result.getResult();
	}

}

这样就能够实现对用户非法訪问站点进行拦截,保证站点的安全性。

时间: 2024-08-18 18:58:09

SpringMVC-Interceptor拦截Session登录的相关文章

SpringMVC之Interceptor拦截器之登录拦截器

SpringMVC的拦截器是主要作用是拦截用户请求到后台之间的请求,在进入后台之前可以对其进行权限认证和用户登录的限制. 1.定义拦截器: springmvc中拦截器中主要有两种方式:第一种是实现HandleInterceptor接口,重写里面的方法:第二种是实现WebRequestInterceptor接口,同样的重写里面的方法,实现自己自定义的逻辑处理. 1.实现handleInterceptor接口: 接口中定义了三个方法:preHandle(requsest,response.handl

登录检查 springMVC Interceptor拦截器实现登访问

web开发中经常会遇到浏览网页时,需要用户登陆之后才能访问一些重要的页面,当你访问一些"非法"页面时,也就是如果检查你还没有登录进该系统,则需要先登录,只要你成功登录就可以访问信管内容,实现该功能需要 继承拦截器HandlerInterceptorAdapter,这个类中有三个重要的方法,灰色老哥方法可以先不关注,主要代码实现是绿色那一部分,代码如下: /** * @author  tony * @date  2014-12-17 */ /** * 登录拦截器,只有登录之后才能访问 *

SpringMVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

SpringMVC 中的Interceptor 拦截器

1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors>  <!-- 日志拦截器 -->  <mvc:interceptor>   <mvc:mapping path="/**" />   <mvc:exclude-mapping path="/static/**" />   <bean class="拦截器java代码路径" />  

SpringMVC中使用Interceptor拦截器详解

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

springMVC中实现用户登录权限验证

通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor拦截器接口的三个方法. 1.preHandle方法,顾名思义,该方法将在请求处理之前进行调用.SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor .每个Interceptor 的调用会依据它的声明顺序依次执行,而且最

SpringMVC处理器拦截器

一.简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.常见应用场景如下: 日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求

SpringMVC:拦截器

SpringMVC:拦截器 2019-10-19 / Java / 狂神说位置: Home » Java » 本页 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.开发者可以自己定义一些拦截器来实现特定的功能. 过滤器与拦截器的区别:拦截器是AOP思想的具体应用. 过滤器 servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截 拦截器 拦截器是

SpringMVC框架拦截器

 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Interceptor类要实现了Spring 的HandlerInterceptor 接口,或者是这个类继承实现了Han