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