给代码上1把"安全锁"的一些方法

本文介绍了如何通过使用Servlet过滤器和Struts2拦截器来增强Web应用程序的安全性。Servlet过滤器能够拦截客户端请求并对数据进行预处理,而Struts2拦截器则负责客户端和服务端的数据校验与类型转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       随着软件技术的普及,现在在网上,流行很多的恶意代码,如:木马病毒等。这些恶意代码,盗取个人账户信息,任意毁坏,窃取各种病毒文件,木马病毒和淫秽色情信息的产生,迷惑人的心志,严重危害现代网络的安全运行;所以我们就要维护个人和单位的安全,写代码时,程序员就要考虑给代码上一把"安全锁",提高代码的安全度,保护个人和单位的数据不被丢失。我们在网络中要提高正能量。

       我是一位初学者,初步探讨用哪些方法和途径给代码上1把安全锁,就算给同仁抛砖引玉吧。

      (一)Servlet过滤器具有拦截客户端请求的功能

Servlet过滤器是小型的web组件,它们拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。可是过滤器通常封装了一些web组件,但是对于处理客户机请求或发送响应不是决定性的。过滤器提供一种面向对象的模块化机制。用以将公共任务封装到可插入的组件中。这些组件通过一个配置文件来说明并动态地处理。

(简图所示)

客户端     过滤器     目标资源

创建1个过滤器对象需要实现Filter,现创建名称为Filterone的过滤器对象。

/**

*过滤器

**/

public classFilterone implements Filter{

//初始化方法

public voidinit(FilterConfig fConfig)

throwsServletException{

//初始化处理

}

//过滤处理方法

public void  doFilter(ServletRequestrequest,ServletResponse response,FilterChain chain)throws IOException, ServletException{

//过滤处理

chain.doFilter(request,response);

}

//销毁方法

public voiddestory(){

}

}

创建名称为Filterone的过滤器对象,代码如下:

<!---过滤器声明--->

<filter>

<!---过滤器名称--->

<filter-name>Filtetone</filter-name>

<!---过滤器完整类名--->

<filter-class>com.Filterone</filter-class>

<!--过滤器URL映射-->

<url-patter>/Filterone</url-pattern>

</filter-mapping>

       以上代码说明:过滤器中的init()方法用于对过滤器的初始化进行处理,destory()方法是对过滤器的销毁方法,主要用于释放资源,对于过滤器处理的业务逻辑需要编写到doFilter()方法中,在请求过滤处理后,需调用chain参数的doFilter( )方法将请求向下传递给下一代过滤器。

        (二)struts2拦截器的应用

         在web系统中除了客户端发送请求数据,服务端进行类型转换外,还需在客户端和服务端对用户输入数据进行校验。

首先进行的是客户端输入校验,这种校验一般只校验用户是否输入了合法的信息,这些验证通过后,就会提交用户输入的信息,并进行服务端校验阶段。

struts2拦截器有多种类型转换,它是1种功能强大的表达式语言(Expression Language),通过存取对象的任意属性,调用对象的方法,实现字段类型。

ognl实现数据类型的转换,建立页面如下:

<% pagelanguage="java" import="java.util.*" pageEncoding="UTF---8"%>

<html>

<head>

<title>登录页面</title>

<link  rel=stylesheet  href="css/logic.css"  type="text/css">

</head>

<body>

<h1align="center">"用户登录页面"</h>

<hr>

<div  align="center">

<form  action="login.lp"mothod="post">

<table  cellspacing=5 boder=5  bordercolor=#ffaa00>

<tr>

<thcolspan="3" align="center" bgcdor="ffaaoo">用户登录</th></tr>

<tr>

<th  rowspan="3"background="images2.jpg" style="width=90px"></th>

<td>用户名:</td><td>

<inputtype="text " class="message" name="user"></td></tr>

<tr><td>密码:</td></tr>

<tdcolspan="3" align="center">

<inputtype="text" class="message" name="user"></td></tr>

<tr><td>密码:</td><td>

<inputclass="message" type="password" name="user"></td></tr>

<input  type="submit" value="登录">

<inputtype="reset"  value="重置"></tr></td>

</table>

</form>

</div>

</body>

</html>

       然后写1个User的From类,用来封装表单的值

package  myclass.struts.form;

public  class User{

public  String name;

public  String  name;

public   String  passsword;

(注:省略构造方法)

        在这里,我使用继承StrutsTypeConverter类再实现,这种方法使用很方便,举例如下:

package  myclass struts2   action;

public   class UserFormTypeCoverter1   extends  StrutsDateFomat StrutaTypeConvertet{

public  Object convertFromString(Map context,String[] value,Class  toType){

User  user=new User();

String  para[ ]=value;//虚拟数组值

String  name=para[0];

String   password=para[1];

Int  telephone=para[2];

try{

user.setName(name);

user.setPassword(password);

}catch(ParseExceptione){

System.out.println("输入错误");

e.printStackTrace();

}

return user;

}

//转换成字符串

public StringconvertToString(Map arg0,Object  o){

String  result =null;

if(o  instanceof  User){

User  user=new User();

result="<"+user.getName()+","+user.gerPassword()+",";

}

return  result;

}

}

第3步  建立action类

Action容器化代替Servlet类处理客户端请求,即通过struts的过滤器拦截HTTP请求,然后将请求分配到指定的Action进行处理。

在web项目中配置的是Struts过滤器,当浏览器向web容器发送1个HTTP请求,通过struts2的内部处理机制,它会判断这个HTTP请求是否与某个Action对象相匹配。如果找到了与这匹配的Action,就会调用Action对象的excute()方法,并根据处理结果返回相应的值,然后Struts2就会通过Action的返回值查找,返回值所映射的页面,最后通过一定的视图回应给浏览器。

首先建立Action类

public  class LoginAction{

public   User  user;

public   String   excute(){

System.out.println("耶稣你好");

System.out.println(user.getName());

System.out.println(user.getPassword());

if("liuzhao".equals(user.getName())&"1234567".equals(user.getPassword())){

return  "succ";

}else{

return   "fail";

}

}

public  User getUser(){

return   user;

}

public   void setUser(User   user){

this.user=user;

}

public UsergetBoss(){

return   boss;

}

public voidset   Boss(User  boss){

this.boss=boss;

   }

}

      5  最后配置struts.xml

<? xml  version="1.0"   encoding="UTF-8">

<!DOCTYPE  struts PUBLIC 

"-Apache   Software  Foundation//DTD Struts Configuration  2.0//EN"

"http://struts.apache.org./dtds/struts-2.0.dtd">

<struts>

<constant  name="struts.action.extension  value="1p"/>

<package  name="login"  namespace="/"  extends="strus-default">

<result name="succ">/succ.jsp</result>

<result name="fail">/failure.jsp</result>

</action>

</package>

</struts>

OGNL类型转换器很多,其他的类型转换器供大家精读

     应用这两方面的技能,就能初步达到给代码上1把"安
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值