http://www.xzbu.com/8/view-1072229.htm



1 用户登录系统的过程分析 
  用户进入系统是通过登录功能来实现的,主要是通过用户名和密码来登录,有时为提高系统的安全级别,还会使用图形验证码、动态口令卡等辅助安全措施。用户在登录之后能够访问哪些资源是由用户的权限决定的。用户登录的时候,系统根据用户名可以获取用户的权限,根据用户的权限可以对用户能够操作的资源进行控制。这个控制包括对某个页面的控制、某个控制器的控制或者某一部分代码的控制。 
  2 用Servlet来实现用户登录功能 
  用户在进入系统时,系统会提供登录功能所需要的登录界面和处理文件,用户在登录界面中输入用户名和密码后,处理文件在获取用户输入的用户名和密码进行有效的验证,根据验证的结果分别做出相应的处理。当用户名和密码都正确后,系统要获取当前用户的权限,把用户信息和权限信息保存在session中,为之后的安全控制使用。当用户名和密码不正确后,则重新转向登录界面,并提示用户错误信息。 
  2.1 用户类的创建 
  用户在登录过程中应输入用户名和密码,并且根据用户的权限实现对系统的操作。根据面向对象的设计的方法,用户类应包含如下成员变量: 
  private String name;//用户名成员变量 
  private String password;//用户密码成员变量 
  private String type;//用户权限成员变量 
  对用户类成员变量进行赋值和获取值的方法采用getXXX()和setXXX()方法部分代码如下: 
  public String getName() //获取用户名成员变量值的方法 
  public void setName(String name) //对用户名成员变量进行赋值的方法 
  在用户类中还封装验证用户名和密码是否正确的方法,其方法名为:findUserByName(String name),它可以在数据库中查询出是否存在此用户。 
  2.2 Servlet现实用户登录功能 
  Servlet处理用户登录过程为:获取用户输入的用户名和密码,根据用户名调用模型的相应方法,根据返回值进行处理,如果返回值为null,则说明用户不存在。否则,判断密码是否正确,如果不正确,提示密码错误信息。如果正确,判断用户的权限。LoginServlet为登录Servlet文件,其doPost()方法的核心代码为: 
   String fd="login.jsp";;//转向文件 
   UserBean u=new UserBean();//创建用户对象 
   HttpSession se=req.getSession();//创建Session对象 
   UserBean user=u.findUserByName(req.getParameter("name"));///在数据库中查询用户 
   if(user==null){ 
   se.setAttribute("info", "用户不存在"); 
   }else if(!user.getPassword().equals(req.getParameter("password"))){密码是否正确 
   se.setAttribute("info", "密码不正确"); 
   }else if(user.getType().equals("1")){ 
   se.setAttribute("login", user); 
  fd="admin.jsp";//管理员 
   }else{ 
   se.setAttribute("login", user); 
   fd="guest.jsp";//普通用户 
   } 
   req.getRequestDispatcher(fd).forward(req, resp);//重定向 
  3 视图的安全控制 
  在进行完Servlet文件处理后,根据session中的用户信息来决定用户是否登录和用户的权限。只有管理员才可以进入到admin.jsp管理员界面,实现管理操作,如果用户没有登录,则返回到login.jsp登录界面;如果当前用户为普通用户,则进入到guest.jsp普通用户界面。用于安全控制的checkuser.jsp页面代码如下: 
  <%@ taglib prefix="c" uri="http://java.省略/jsp/jstl/core" %> 
   
  通过视图的安全控制,可以防止一些非法用户进入到本系统中的界面中,现实视图层的安全机制。 
  4 过滤器的安全控制 
  过滤器(filter)是一个对象,它用来在源数据和目的地数据之间截获信息,然后对在它们之间传递的数据进行过滤,也就是说当访问Servlet过滤器所对应的Servlet时,会先执行Servlet过滤器,对请求和响应的信息进行过滤。如图2所示。 
   
  图2过滤器的过滤功能 
  过滤器可以提高系统的安全性,可以使用户在调用Servlet登录功能之前对用户信息进行过滤,将一些非法信息过滤掉,提高系统的运行效率。UserLoginFilter过滤器是用于验证session是否含有用户信息,以判断用户是否登录和用户权限。其doFilter()方法的核心代码: 
   HttpServletRequest rq=(HttpServletRequest) req; 
   HttpServletResponse re=(HttpServletResponse) resp; 
   HttpSession session=rq.getSession();//获得session对象 
   UserBean user=(UserBean)session.getAttribute("login"); 
   if(user==null){//判断用户登录信息 
   re.sendRedirect("login.jsp"); 
   }else if(user.getType().equals("0")){//普通用户进入到普通界面 
   re.sendRedirect("guest.jsp"); 
   }else{//管理员进入到管理界面 
   re.sendRedirect("admin.jsp"); 
   } 
  我们可能编写多个过滤器,现实一条过滤链,可以将用户信息逐一进行过滤最后保证请求和响应的信息安全。 
  5 结论 
  运用Java Web技术实现了视图验证、过滤器验证和Servlet登录功能的验证,可以使用户登录系统的安全性得以提高,防止恶意用户登录到系统中。当然系统安全是一个复杂的问题,本文希望能起着“抛砖引玉”的作用,为日后设计和开发Web应用程序时提供给大家一点启发和思路。 


    原文地址:http://www.xzbu.com/8/view-1072229.htm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
把字符串型 http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666529,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666269,http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/85909,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24132384,http://baike.baidu.com/view/1.htm,http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/23583829,http://baike.baidu.com/view/4.htm,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/85904,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666716,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/57049628,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/49728219,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24333588,http://baike.baidu.com/view/2.htm,http://baike.baidu.com/view/9.htm,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24359580,http://baike.baidu.com/view/10.htm,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666529,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666269,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/85906,http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/85909,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24132384,http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/23583829,http://baike.baidu.com/view/4.htm,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/85904,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666716,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/57049628,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/49728219,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24333588,http://baike.baidu.com/view/2.htm,http://baike.baidu.com/view/9.htm,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24359580,http://baike.baidu.com/view/10.htm 用逗号分隔,再去重后遍历
06-09
好的,我理解了你的要求。这个问题可以分为两个步骤,第一个是将字符串分割成多个链接,第二个是去重后遍历。这是我的解决方案: ```python # 将字符串拆分成多个链接 link_str = "http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666529,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666269,http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/85909,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24132384,http://baike.baidu.com/view/1.htm,http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/23583829,http://baike.baidu.com/view/4.htm,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/85904,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666716,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/57049628,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/49728219,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24333588,http://baike.baidu.com/view/2.htm,http://baike.baidu.com/view/9.htm,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24359580,http://baike.baidu.com/view/10.htm,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666529,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666269,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/85906,http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/85909,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24132384,http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/23583829,http://baike.baidu.com/view/4.htm,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/85904,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666716,http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/57049628,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/49728219,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24333588,http://baike.baidu.com/view/2.htm,http://baike.baidu.com/view/9.htm,http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24359580,http://baike.baidu.com/view/10.htm" links = link_str.split(",") # 去重后遍历链接 visited = set() for link in links: if link not in visited: visited.add(link) print(link) ``` 这个代码会输出: ``` http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666529 http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666269 http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/85909 http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24132384 http://baike.baidu.com/view/1.htm http://baike.baidu.com/item/%E5%A4%A7%E9%BE%99%E6%B9%AB/23583829 http://baike.baidu.com/view/4.htm http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/85904 http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/22666716 http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/57049628 http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/49728219 http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24333588 http://baike.baidu.com/view/2.htm http://baike.baidu.com/view/9.htm http://baike.baidu.com/item/%E9%9B%81%E8%8D%A1%E5%B1%B1/24359580 http://baike.baidu.com/view/10.htm http://baike.baidu.com/item/%E7%81%B5%E5%B3%B0/85906 ``` 这些链接已经去重并且按照出现的顺序遍历了一遍。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值