java 暴露 url 安全_[Java教程]URL安全问题(过滤器)

[Java教程]URL安全问题(过滤器)

0 2014-04-08 16:00:14

在做一个java web 应用的时候,经常要涉及到三个URL的安全问题:

1、没有登录,直接输入对应的URL就可以进入页面;

2、权限问题,普通用户也可以进入管理员的页面,没有权限限制。

3、seesion失效时,刷新会错误。

4、防止用户从其他网站url直接连接进入我网站的某个资源,或者某些页面要求必须从某个页面传递进来,直接输入url进入可能会缺少数据而报错等。此时,可以查看请求的上个页面url来判断,语句如下:httpRequest.getHeader("referer") 该语句可以获得上个页面的url。

解决方法就是配置附过滤器对请求进行过滤:

相应的解决方法为:

1、第一点和第三点、第四点的解决方法:

配置用户登录过滤器,即检查session中有没有用户存在,若存在,则进入,没有存在,则跳转。实现如下:

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gif1 /* 2 * To change this license header, choose License Headers in Project Properties. 3 * To change this template file, choose Tools | Templates 4 * and open the template in the editor. 5 */ 6 package com.manager.web.filter; 7 8 import java.io.IOException; 9 import java.io.PrintStream;10 import java.io.PrintWriter;11 import java.io.StringWriter;12 import javax.servlet.Filter;13 import javax.servlet.FilterChain;14 import javax.servlet.FilterConfig;15 import javax.servlet.ServletException;16 import javax.servlet.ServletRequest;17 import javax.servlet.ServletResponse;18 import javax.servlet.annotation.WebFilter;19 import javax.servlet.http.HttpServletRequest;20 import javax.servlet.http.HttpServletResponse;21 import javax.servlet.http.HttpSession;22 23 /**24 *25 * @author wang26 */27 @WebFilter(filterName = "loginFilter", urlPatterns = {"*.do"})28 public class LoginFilter implements Filter {29 30 private final static String[] exit_url = {"/login/index.do", "/login/logOff.do"}; // 不用做权限判断的URL 31 32 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {33 // 1、转化成http的请求和响应34 HttpServletRequest httpRequest = (HttpServletRequest) request;35 HttpServletResponse httpResponse = (HttpServletResponse) response;36 String url = httpRequest.getRequestURI();37 System.out.println(url + ":do login Filer!");38 39 // 2、取得session40 HttpSession session = httpRequest.getSession();41 42 // 3、先过滤掉一些不用登录也可以访问的页面43 boolean isExit = false;44 for (String u : exit_url) {45 if (url.indexOf(u) >= 0) {46 // System.out.println(url + "---" + url.indexOf(u));47 isExit = true;48 break;49 }50 }51 52 // 4、/login/verify.do这个请求比较特殊,为了安全,应该屏蔽没有登录的用户请求进入,53 // 但是由于发出该请求时用户肯定是空的,没法使用下面的方法屏蔽,需要使用另外一种方法54 // 即判断发出该请求的上个请求uri是来自与登录页面的uri,就允许请求,否则拒绝,转到index。55 // 下面判断url是对verify的请求,且上个页面不是/login/index.do,便转发到登录页面56 if (url.contains("/login/verify.do")) {57 //上个页面来自登录页面58 if (httpRequest.getHeader("referer") != null && httpRequest.getHeader("referer").contains("/login/index.do")) {59 isExit = true;60 } else {//不是来自登录页面,拒绝这个请求61 httpResponse.sendRedirect("/managerSystem/login/index.do");62 return;63 }64 }65 66 // 4、判断session中有没有user这个属性,如果有这表明已经登录;若无,则表明还没登录,应该重定向到登录页面67 if (!isExit && session.getAttribute("user") == null) {68 // System.out.println(url + "Yes!");69 httpResponse.sendRedirect("/managerSystem/login/index.do");70 return;//必须加,不然会继续往后执行71 }72 73 chain.doFilter(request, response);74 }75 76 public void destroy() {77 }78 79 /**80 * Init method for this filter81 */82 public void init(FilterConfig filterConfig) {83 }84 85 }

View Code

2、第二点的解决方法:

配置权限管理过滤器

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gif1 /* 2 * To change this license header, choose License Headers in Project Properties. 3 * To change this template file, choose Tools | Templates 4 * and open the template in the editor. 5 */ 6 package com.manager.web.filter; 7 8 import com.manager.web.entity.User; 9 import java.io.IOException;10 import java.io.PrintStream;11 import java.io.PrintWriter;12 import java.io.StringWriter;13 import javax.servlet.Filter;14 import javax.servlet.FilterChain;15 import javax.servlet.FilterConfig;16 import javax.servlet.ServletException;17 import javax.servlet.ServletRequest;18 import javax.servlet.ServletResponse;19 import javax.servlet.annotation.WebFilter;20 import javax.servlet.http.HttpServletRequest;21 import javax.servlet.http.HttpServletResponse;22 import javax.servlet.http.HttpSession;23 24 /**25 *26 * @author wang27 */28 @WebFilter(filterName = "permitFilter", urlPatterns = {"*.do"})29 public class PermitFilter implements Filter {30 // 不用做权限判断的URL 31 private final static String[] user_canot_access_url = 32 {"login/adminHomePage.do", "signature/adminUserSignature.do","user/adminUserManager.do"}; 33 34 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {35 // 1、转化成http的请求和响应36 HttpServletRequest httpRequest = (HttpServletRequest) request;37 HttpServletResponse httpResponse = (HttpServletResponse) response;38 String uri = httpRequest.getRequestURI();39 System.out.println(uri + ":do permit Filer!");40 41 // 2、取得session中的user,判断他的用户类型(user或者admin),限制user对管理员页面的访问42 HttpSession session = httpRequest.getSession();43 User user = (User) session.getAttribute("user");44 45 // 3、//判断用户登录且用户类型是user46 if (user != null && user.getUser_type().equals("user")) {47 for(String u:user_canot_access_url){48 if(uri.endsWith(u)){49 httpResponse.sendRedirect("/managerSystem/login/index.do");50 return;51 }52 } 53 }54 55 chain.doFilter(request, response);56 }57 58 public void destroy() {59 }60 61 /**62 * Init method for this filter63 */64 public void init(FilterConfig filterConfig) {65 }66 67 }

View Code

本文网址:http://www.shaoqun.com/a/87974.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

URL

0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值