SpringMVC-Interceptor拦截Session登录

目录(?)[-]

  1. 首先新建一个自定义的拦截器
  2. 新建一个登录失败异常类
  3. SpringMVC配置文件
  4. LoginControllerjava



背景:

开发的项目都需要账号密码登录才可以查看网站的内容,所以我们设计时需要考虑,用户进入网站只能从一个我们设计的规范通道进入即通过注册的账号密码登录,其他方法都是非法的和不允许的,所以我们就要对非法的访问进行拦截并跳转到用户登录页面。

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

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

LoginInterceptor.Java

[java]  view plain  copy
 print ?
  1. import javax.servlet.http.HttpServletRequest;  
  2. import javax.servlet.http.HttpServletResponse;  
  3. import javax.servlet.http.HttpSession;  
  4.   
  5. import org.apache.log4j.Logger;  
  6. import org.springframework.web.servlet.HandlerInterceptor;  
  7. import org.springframework.web.servlet.ModelAndView;  
  8. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;  
  9.   
  10. import com.sgcc.uds.fs.client.UserToken;  
  11.   
  12. /** 
  13.  * @author lyx 
  14.  *   
  15.  * 2015-8-17上午9:53:23 
  16.  * 
  17.  * 
  18.  *登录拦截器 
  19.  */  
  20. public class LoginInterceptor implements HandlerInterceptor {  
  21.   
  22.     //日志  
  23.     protected Logger log = Logger.getLogger(getClass());  
  24.       
  25.       
  26.       
  27.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response,  
  28.             Object handle) throws Exception {  
  29.           
  30.         //创建session  
  31.         HttpSession session =request.getSession();  
  32.           
  33.         //无需登录,允许访问的地址  
  34.         String[] allowUrls =new String[]{"/toLogin","/login"};  
  35.               
  36.         //获取请求地址  
  37.         String url =request.getRequestURL().toString();  
  38.           
  39.         //获得session中的用户  
  40.         UserToken user =(UserToken) session.getAttribute("userToken");  
  41.       
  42.           
  43.         for (String strUrl : allowUrls) {  
  44.             if(url.contains(strUrl))  
  45.             {  
  46.                 return true;  
  47.             }  
  48.         }  
  49.           
  50.         if(user ==null)  
  51.         {  
  52.             throw new UnLoginException("您尚未登录!");     
  53.                                   
  54.         }  
  55.         //重定向  
  56.         //response.sendRedirect(request.getContextPath()+"/toLogin");  
  57.               
  58.           
  59.             return true;  
  60.           
  61.           
  62.     }  
  63.   
  64.     @Override  
  65.     public void postHandle(HttpServletRequest request,  
  66.             HttpServletResponse response, Object handler,  
  67.             ModelAndView modelAndView) throws Exception {  
  68.         // TODO Auto-generated method stub  
  69.           
  70.     }  
  71.   
  72.     @Override  
  73.     public void afterCompletion(HttpServletRequest request,  
  74.             HttpServletResponse response, Object handler, Exception ex)  
  75.             throws Exception {  
  76.         // TODO Auto-generated method stub  
  77.           
  78.     }  
  79.       
  80. }  

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

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

UnLoginException.java

[java]  view plain  copy
 print ?
  1. import java.io.IOException;  
  2.   
  3.   
  4. /** 
  5.  * @author lyx 
  6.  *   
  7.  * 2015-8-17上午10:57:24 
  8.  * 
  9.  *fs-config-web.com.sgcc.uds.fs.config.web.interceptor.UnLoginException 
  10.  *登录失败异常类 
  11.  */  
  12. public class UnLoginException extends Exception{  
  13.   
  14.     /** 
  15.      *  
  16.      */  
  17.     private static final long serialVersionUID = 1L;  
  18.   
  19.     public UnLoginException() {  
  20.         super();  
  21.         // TODO Auto-generated constructor stub  
  22.     }  
  23.   
  24.     public UnLoginException(String message) throws IOException {  
  25.         super(message);  
  26.         // TODO Auto-generated constructor stub  
  27.     }  
  28.   
  29.       
  30. }  


SpringMVC配置文件:

ApplicationContext-config-web.xml

[java]  view plain  copy
 print ?
  1. <!-- 拦截器 -->  
  2. <mvc:interceptors>  
  3.      <mvc:interceptor>   
  4.         <!-- 拦截全部地址 -->  
  5.         <mvc:mapping path="/**"/>    
  6.         <!-- 登录拦截类 -->  
  7.         <bean id="loginInterceptor" class="com.sgcc.uds.fs.config.web.interceptor.LoginInterceptor">  
  8.         </bean>  
  9.      </mvc:interceptor>     
  10. </mvc:interceptors>  
  11.   
  12. <!-- 异常 -->  
  13.   <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">    
  14.      <property name="exceptionMappings">    
  15.        <props>    
  16.         <登录失败异常类>  
  17.          <prop key="com.sgcc.uds.fs.config.web.interceptor.UnLoginException">redirect:/toLogin</prop>    
  18.        </props>    
  19.      </property>    
  20.    </bean>    

LoginController.java

[java]  view plain  copy
 print ?
  1. import java.util.Map;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpSession;  
  5.   
  6. import org.springframework.stereotype.Controller;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import org.springframework.web.bind.annotation.RequestMethod;  
  9. import org.springframework.web.bind.annotation.RequestParam;  
  10. import org.springframework.web.bind.annotation.ResponseBody;  
  11.   
  12. import com.sgcc.uds.fs.client.UserToken;  
  13. import com.sgcc.uds.fs.config.web.util.ResultUtil;  
  14.   
  15.   
  16. @Controller  
  17. public class LoginController {  
  18.       
  19.     @RequestMapping(value = "/", method = RequestMethod.GET)  
  20.     public String welcome(HttpServletRequest request){  
  21.          //TODO 判断有无session,有直接到首页  
  22.         if(request.getSession().getAttribute("userToken")!=null)  
  23.         {  
  24.             return "/index";  
  25.         }  
  26.           
  27.          return "login";  
  28.     }  
  29.     @RequestMapping(value = "/toLogin", method = RequestMethod.GET)  
  30.     public String toLogin(HttpServletRequest request){  
  31.           
  32.          //TODO 判断有无session,有直接到首页  
  33.         if(request.getSession().getAttribute("userToken")!=null)  
  34.         {  
  35.             return "/index";  
  36.         }  
  37.           
  38.          return "login";  
  39.     }  
  40.       
  41.     @RequestMapping(value = "/login", method = RequestMethod.POST)  
  42.     @ResponseBody  
  43.     public Map<String, Object> login(@RequestParam(required=true,value="loginName") String loginName, @RequestParam(required=true,value="pwd") String pwd,HttpServletRequest request){  
  44.         ResultUtil result = new ResultUtil();  
  45.         try   
  46.         {     
  47.             if(null != loginName && loginName.equals("admin") && null != pwd && pwd.equals("admin") ){  
  48.                 //TODO 登陆成功,保存session  
  49.                   
  50.                 HttpSession session =request.getSession();  
  51.                   
  52.                 UserToken userToken =new UserToken("admin","admin""bucketName");  
  53.                   
  54.                 session.setAttribute("userToken",userToken);  
  55.                   
  56.                 //设置超时无效  
  57.                 //session.setMaxInactiveInterval(20);  
  58.                   
  59.             }else{  
  60.                 result.setSuccess(false);  
  61.                 result.setMsg("用户名或密码错误!");  
  62.             }  
  63.               
  64.         } catch (Exception e)   
  65.         {  
  66.             result.setSuccess(false);  
  67.             result.setMsg("系统内部异常!");  
  68.         }  
  69.         return result.getResult();  
  70.     }  
  71.       
  72. }  

这样就可以实现对用户非法访问网站进行拦截,保证网站的安全性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值