SpringMVC IP权限设计

在开发中遇见这样的需求,指定某些IP用户,这些IP用户发送过来的请求,不需要进行权限判断;让他们越过登录页,直接进入到其浏览器输入URL所指向的页面。我用的是springmvc的拦截器来做的
下面就是我的思路(我只做了单个IP测试,所以存放IP没有用集合或数组,不过你们用的时候可以在修改):
1、首先确定不需权限判断的IP存放位置:这里我放在工具类中:Const
2、如何获取用户请求的IP:http://blog.csdn.net/sgx425021234/article/details/19043459这个网址下面有三种获取用户IP的方法:不过如果用本机localhost访问时,用第三种方案;这里我就是用的这种方案来获取用户请求的url的。
3、配置拦截器:确定哪些url不需要拦截,哪些需要拦截
4、自定义一个拦截器:LoginHandlerInterceptor,这里需要继承HandlerInterceptorAdapter
下面就让我们看看代码吧:
1、Const类

public class Const {public static final String SESSION_SECURITY_CODE = "sessionSecCode";public static final String SESSION_USER = "sessionUser";public static final String NO_INTERCEPTOR_PATH = ".*/((login)|(logout)|(code)).*"; //不对匹配该值的访问路径拦截(正则)
<span style="white-space:pre"> </span>public static final String SESSION_SECURITY_IP="127.0.0.1";}
2、
package <span style="font-family: Arial, Helvetica, sans-serif;">com.flf</span><span style="font-family: Arial, Helvetica, sans-serif;">.util;</span>
import java.net.InetAddress;
import java.net.UnknownHostException;import javax.servlet.http.HttpServletRequest;
public class AcquireIp {/*** 获取用户当前请求的IP地址* @param request* @return*/public static String getIpAddr(HttpServletRequest request){  String ipAddress = request.getHeader("x-forwarded-for");  if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  ipAddress = request.getHeader("Proxy-Client-IP");  }  if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  ipAddress = request.getHeader("WL-Proxy-Client-IP");  }  if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  ipAddress = request.getRemoteAddr();  if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){  //根据网卡取本机配置的IP  InetAddress inet=null;  try {  inet = InetAddress.getLocalHost();  } catch (UnknownHostException e) {  e.printStackTrace();  }  ipAddress= inet.getHostAddress();  }  }  //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割  if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15  if(ipAddress.indexOf(",")>0){  ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));  }  }  return ipAddress;   }  }

3、配置文件相关代码:在springmvc的配置文件中配置下面一段拦截

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**/*.html*"/><bean class="com.flf.interceptor.LoginHandlerInterceptor"/></mvc:interceptor></mvc:interceptors>

4、LoginHandlerInterceptor拦截器:

<pre name="code" class="java">package com.flf.interceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import com.flf.entity.User;
import com.flf.util.Const;
public class LoginHandlerInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request,
<span style="white-space:pre">         </span>HttpServletResponse response, Object handler) throws Exception {
<span style="white-space:pre">     </span>// TODO Auto-generated method stub
<span style="white-space:pre">     </span>String path = request.getServletPath();
<span style="white-space:pre">     </span>//获取用户请求的IP
<span style="white-space:pre">     </span>String requestIp =AcquireIp.getIpAddr(request);
<span style="white-space:pre">     </span>if(path.matches(Const.NO_INTERCEPTOR_PATH)){
<span style="white-space:pre">         </span>return true;
<span style="white-space:pre">     </span>}       
<span style="white-space:pre">            </span>HttpSession session = request.getSession();
<span style="white-space:pre">         </span>User user = (User)session.getAttribute(Const.SESSION_USER);
<span style="white-space:pre">         </span>if(requestIp!=null && requestIp.equals(Const.SESSION_SECURITY_IP)){
<span style="white-space:pre">             </span>//response.sendRedirect(request.getContextPath()+path);
<span style="white-space:pre">             </span>return true;
<span style="white-space:pre">         </span>}else{
<span style="white-space:pre">             </span>if(user!=null){
<span style="white-space:pre">                 </span>return true;
<span style="white-space:pre">             </span>}else{
<span style="white-space:pre">                 </span>response.sendRedirect(request.getContextPath()+ "/login");
<span style="white-space:pre">                 </span>return false;<span style="white-space:pre">       </span>
<span style="white-space:pre">             </span>}
<span style="white-space:pre">         </span>}
<span style="white-space:pre">         </span>
<span style="white-space:pre">     </span>}
<span style="white-space:pre">     </span>return super.preHandle(request, response, handler);
<span style="white-space:pre">     </span>
<span style="white-space:pre"> </span>}
}

}

以上就是有关IP权限判断相关的问题。

SpringMVC IP权限设计相关推荐

  1. IP网络设计系列之-局域网设计

    [导读]这是ip网络设计系列讲座的最后一部分,讨论园区局域网设计中遇到的一些问题.以太网交换机优越于传统的集线器环境的好处将首先介绍一下.应用虚拟局域网的动机已经同规划和配置虚拟局域网遇到的问题一起进 ...

  2. 转载:闲话权限设计三层境界

    转自: http://www.cnblogs.com/tsoukw/archive/2010/09/27/1836485.html 喜欢金庸的武侠,对他那几部小说也是乐此不疲 拿独孤求败来说,他的剑, ...

  3. 浅谈权限设计(来自深空老大)

    2019独角兽企业重金招聘Python工程师标准>>> By 深空, 2009-09-13 21:45:07 PHPChina的专家版在谈权限设计,苦于没有权限回帖,特发此博文谈谈简 ...

  4. 基于shiro的权限设计

    shiro介绍 Apache shiro是一个权限控制框架,它将安全认证抽取出来,实现用户身份认证,权限授权,加密,会话管理等功能,是一个通用的安全认证框架,而且还可以用于分布式集群.功能如下 1.验 ...

  5. 跟我学Springboot开发后端管理系统8:Matrxi-Web权限设计实现

    上篇文章讲述了Matrix-web整体实现的权限控制的思路.现在来回顾一下: 首先,用户需要登录,填用户名.密码,后端接收到登录请求,进行用户.密码的校验,校验成功后则根据用户名生成Token,并返回 ...

  6. 跟我学Springboot开发后端管理系统7:Matrxi-Web权限设计

    Matrxi-Web权限设计 对于一个后端系统来说,权限是基础设施,是安全保障.没有权限,系统可能随时面临各种风险,所以权限设计对后端系统来说至关重要.在Javaweb开发中,有很多权限开发的框架,比 ...

  7. 权限设计的一些想法和思考

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:cross my.oschina.net/cloudcros ...

  8. 浅谈OFBiz之权限设计

    简介 Apache Open For Business(Apache OFBiz) 是Apache开源的一个经典ERP项目.它提供了一套企业应用,用于集成以及自动化一些企业的"商业流程&qu ...

  9. RBAC角色权限设计

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

最新文章

  1. 不用精子就能繁育后代,科学家只用1个卵细胞就培育出健康小鼠,来自上交医学院 | PNAS...
  2. html5调用手机摄像头,实现拍照上传功能
  3. pyecharts离线使用说明
  4. 2015年10月15日学习html基础笔记
  5. 网站运维技术与实践之服务器监测常用命令
  6. 安装rpm包命令_编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出...
  7. 数据库性能优化—分库分表
  8. uniapp中实现每次点击左侧菜单右边区域都从顶部开始
  9. 热议 | 深圳中学教师年薪35万,有一半是博士
  10. 网格系统常用的三种比例
  11. 【追寻javascript高手之路05】理解事件流
  12. Linux命令:修改文件权限命令chmod、chgrp、chown详解
  13. 算法设计与分析课后习题答案
  14. HDOJ 5142 NPY and FFT 水
  15. bayaim_今晚打老虎
  16. Python索引 说明
  17. android xml pid vid,关于Android机型的pid vid的那些破事儿
  18. 神马都是浮云!神马浮云是什么意思?-出自小月月
  19. Microsemi Libero SoC 教程1 (Libero开发环境)
  20. 个人如何打破部门墙_做事要有霸气

热门文章

  1. Oracle使用默认用户登陆时,conn sys/密码 as sysdba,密码怎么是什么都行啊?
  2. 面向对象程序设计第三次实验课——Wuxing
  3. 高仿163网站广告弹出层(每天定时24小时弹出一次)
  4. 基于内容的推荐算法(CB)
  5. 【水】Dev-c++黑暗模式教程
  6. 不熟悉的四级核心词汇(三)
  7. CSP-SM常见问题及解答
  8. 公众号如何利用流量广告变现?
  9. 一文带你了解爆火的Chat GPT
  10. Decide.com进军团购业务并推“退差价计划”