鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 网站制作教程 > JSP > >

JSP学习之Java Web中的安全控制实例详解

来源:互联网 作者:佚名 时间:2015-09-29 01:43
这篇文章主要介绍了JSP学习之Java Web中的安全控制,较为详细的分析了JSP安全控制的常见技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了JSP学习之Java Web中的安全控制。分享给大家供大家参考。具体如下:

一、目标:

① 掌握登录之后的一般处理过程;
② 能够为每个页面添加安全控制;
③ 能够共享验证代码;
④ 使用过滤器对权限进行验证;
⑤ 能够对文件的局部内容进行验证;
⑥ 掌握安全验证码的基本实现方式;
⑦ 通过异常处理增强安全性。

二、主要内容:

① 通过修改前面的登录功能,分别对管理员和普通用户的登录进行处理;
② 为管理员才能访问的页面添加控制;
③ 共享各个页面中的控制代码,使用专门的文件,然后在需要的时候调用;
④ 使用过滤器降低重复验证代码;
⑤ 通过标准标签库完成页面局部信息的安全控制;
⑥ 介绍安全验证码的基本实现方式;

1、完善登录功能

正常情况下,管理员登录成功之后跳转到管理员默认工作界面;普通用户登录之后跳转到普通用户默认工作界面;用户登录失败后跳转到登录界面重新登录。
为了完成这个功能,需要编写管理员界面和普通用户界面。
管理员界面对应的文件为manager.jsp,,代码如下:

manager.jsp代码:

复制代码 代码如下:

<%@ page contentType="text/html;charset=gb2312"%>


管理员操作界面

普通用户界面对应的文件为commonuser.jsp,代码如下:

commonuser.jsp代码:

复制代码 代码如下:

<%@ page contentType="text/html;charset=gb2312"%>


普通用户界面

修改登录的Servlet,修改后的代码如下:

LoginProcess.java代码:

package servlet; import javabean.User; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LoginProcess extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取信息 String username = request.getParameter("username"); String userpass = request.getParameter("userpass"); // 调用JavaBean User user = new User(); user = user.findUserByName(username); String forward; if(user==null){ forward="failure.jsp"; }else if(user.getUserpass().equals(userpass)){ if(user.getUsertype().equals("1")){ forward="manager.jsp"; } else{ forward="commonuser.jsp"; } }else{ forward="failure.jsp"; } RequestDispatcher rd = request.getRequestDispatcher(forward); rd.forward(request,response); } }

2、为每个界面添加安全控制

上面的实例中登录成功后会跳转到管理员界面或者普通用户界面,但是如果用户直接输入管理员界面,就会跳过登录界面。例如用户可以直接输入::8080/ch11/manager.jsp。

为了解决这个问题,在每个有安全限制的界面都应该增加安全控制。需要完成两项工作:

① 在登录之后把用户的信息写入到session中;
② 在每个页面中,从session中获取信息进行验证;

在登录之后把用户信息写入到session中,下面是修改后的LoginProcess.java代码:

LoginProcess.java代码:

package servlet; import javabean.User; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LoginProcess extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取信息 String username = request.getParameter("username"); String userpass = request.getParameter("userpass"); // 调用JavaBean User user = new User(); user = user.findUserByName(username); // 得到session对象 HttpSession session = request.getSession(true); String forward; if(user==null){ forward="failure.jsp"; }else if(user.getUserpass().equals(userpass)){ if(user.getUsertype().equals("1")){ // 在session对象中存储信息 session.setAttribute("usertype","1"); forward="manager.jsp"; } else{ session.setAttribute("usertype","0"); forward="commonuser.jsp"; } }else{ forward="failure.jsp"; } RequestDispatcher rd = request.getRequestDispatcher(forward); rd.forward(request,response); } }

以commonuser.jsp为例介绍如何在每个文件中进行安全控制,下面是修改后的代码:

commonuser.jsp代码:

<%@ page contentType="text/html;charset=gb2312"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <c:if test="${usertype!=/"0/"}"> <jsp:forward page="login.jsp"/> </c:if>

普通用户界面

这样,如果不登录而直接访问commonuser.jsp就会跳转到登录界面。

3、采用专门的文件进行验证

因为很多页面都要编写验证的代码,所以可以把这些代码放在一个文件中进行共享,需要的使用调用共享文件。下面仍然以commonuser.jsp为例介绍如何实现验证代码的共享。

使用专门的文件存放共享代码:

check.jsp代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <c:if test="${usertype!=/"0/"}"> <jsp:forward page="login.jsp"/> </c:if>

在需要验证的文件中导入这个专门的文件。以commonuser.jsp为例:

commonuser.jsp代码:

<%@ page contentType="text/html;charset=gb2312"%> <%@ include file="check.jsp" %>

普通用户界面

使用include指令包含目标文件,在把JSP转换成Java文件的时候,会把目标文件的代码拷贝到当前文件。
再运行测试,结果是相同的。

4、使用过滤器对权限进行验证

把具有相同权限要求的文件放在相同的文件夹下,对文件夹的访问进行统一的过滤。

编写用于过滤的Servlet,代码如下:

CommonCheck.java代码:

网友评论
<