当前位置:首页 » 编程语言 » 拦截器防止sql注入
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

拦截器防止sql注入

发布时间: 2022-10-24 13:55:56

㈠ 实体类的@tableid注解可以防止sql注入吗

不可以,防sql注入一般有两种方式

  1. 以参数绑定的形式执行查询 比如hibernate的setParamter,jdbc的preparedstatement

  2. 编写全局的拦截器,过滤参数中的特殊字符(有误判)

SQL注入解决方案

㈡ 现在有个需求,用的是hibernate,需要在hibernate拦截器中对查询的sql进行where条件拼接

这个写起来很麻烦,提供解决思路。
1、在web.xml里实现拦截器配置。针对于某一个连接跳转的。
2、拦截器功能实现,拿到参数。实现需要反射进行实现,同时要保证线程安全。
3、参数处理放到Session里。
4、在实际SQL语句中查询。

如果跟spring集成的话,建议使用spring的AOP,进行动态代理实现。 进行初期处理。

㈢ java web 过滤器跟拦截器的区别和使用

区别如下:

1 、拦截器是基于java的反射机制的,而过滤器是基于函数回调。

2 、拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

3 、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

4 、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

5 、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

使用如下:

在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话是否有效;对提交的数据进行统一编码。

这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。

(3)拦截器防止sql注入扩展阅读

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。

㈣ mybatis中拦截器怎么实现拦截插入指定表的操作

首先要实现mybatis的Interceptor接口,
实现它的三个方法:

Object intercept(Invocation invocation) throws Throwable;

Object plugin(Object target);

void setProperties(Properties properties);
plugin方法是拦截器用于封装目标对象的,通过该方法我们可以返回目标对象本身,也可以返回一个它的代理。当返回的是代理的时候我们可以对其中的方法进行拦截来调用intercept方法,当然也可以调用其他方法,这点将在后文讲解。

setProperties方法是用于在Mybatis配置文件中指定一些属性的。

plugin方法中我们可以决定是否要进行拦截进而决定要返回一个什么样的目标对象。而intercept方法就是要进行拦截的时候要执行的方法。
下面例子本来相用于记录日志到数据库,但是由于mybatis底层无法注入spring的

㈤ 一个springMVC的小项目 包括用户角色权限管理的DEMO

随着企业信息化的不断深入,各种各样的信息系统成为提高企业运营及管理效率的必备工具,越来越多的企业核心机密如销售机会、客户资料、设计方案等通过信息系统存储、备案、流转,这些核心资料一旦外泄,势必对企业造成极大损失。科技时代,信息是企业生存的命脉,信息的安全也必然成为企业极度重视的问题。如今,随着各种信息安全措施的实施,信息泄密已经从外部泄漏向内部人员泄漏转移。外部的黑客、病毒要想获取有价值的信息,必须穿透多道防火墙,逃避多重杀毒工具的追杀,再对信息进行筛选才能如愿以偿;而内部人员知道什么信息是有价值的,如果不对信息进行必要的安全防护,企业内部一些有有心人员会十分容易地获取自己所需要的信息资料。
最近的一份调查显示,几乎有一半的各行各业专业人士承认当他们跳槽时会带走资料,包括文件、销售协议和合同清单等各种资料,并将它们告诉下一个老板。调查还发现,八成的职员可以轻松地下载“有竞争力”的资料和信息,然后带到下一份工作中。
信息安全任重而道远。要保证信息系统的安全,需要考虑到很多方面如防火墙、加密传输、防SQL注入等,但很多的安全方案都是从如何把守大门着手的,如身份认证、数字证书,不管是传统的用户名加口令方式还是基于生物特征识别的指纹、视网膜扫描技术,乃至各类电子政务领域常用的USBkey都是在进入系统大门时大做文章,一旦身份识别完成进入大门后,却听之任之,很少再有处理方案。本文重点不在如何进行身份认证,而在身份认证完成后也即进入系统大门后,如何保证用户只在自己有权限的范围内进行操作,而不是可以进行任意功能的操作即系统内部细粒度权限控制解决方案。

常用的权限系统设计模式是以角色为核心的,即角色是具有相同权限的一类人员的集合:
1. 一个角色可以有包含多个操作人员,一个操作人员也可以属于多个角色
2. 一个角色可以具有多个功能的操作权限,一个功能也可以被多个角色所拥有。
在登录时通过查询登录用户所属角色,即可得到个用户的所有功能集合,如下图:

多数业务系统的页面功能菜单设计是以三级为标准的,即一级功能菜单、二级功能菜单、三级功能菜单,通常情况下一二级功能菜单只是用于功能分类,是不具有功能访问地址的,三级菜单才是功能的真正入口,常规权限系统就是通过控制每个人员对应的功能菜单的显示与隐藏来实现权限控制。要实现细粒度权限控制,可在设计功能表时再加入第四层:页面元素,隶属于第三层功能菜单,这些页面元素用来标识功能页面中的每一个功能按钮,如增加、修改、删除、查询都可算是页面元素,在为角色分配权限时,第四层也同样纳入统一权限管理,如果有此页面元素的权限,则页面上就显示该按钮,如果没有此页面元素的功能权限,则该按钮就不会显示出来。

对于没有权限访问的功能或页面除了进行前台的隐藏之外,还需要在后台访问时进行权限的验证,否则操作人员绕开页面直接通过输入URL访问功能就会造成权限漏洞,通过SpringMVC+Annotation的方式可以轻松实现,代码如下:
第一步:创建SpringMVC拦截器,拦截所有需要进行权限验证的功能请求

[html] view plain
<!-- 开启注解 -->
<mvc:annotation-driven/>

<!-- 静态资源访问 -->
<mvc:resources location="/static/" mapping="/static/**"/>

<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<!-- 如果不配置或/**,将拦截所有的Controller -->
<mvc:mapping path="/**" />
<!-- 在Freemarker界面展示之前做一些通用处理 -->
<bean class="xx.xxxx.core.web.FreeMarkerViewInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

第二步:创建作用于Method级别的Annotation类,用于传入功能ID

[java] view plain
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Permission {

/**
* 功能ID,该功能ID,对应数据库中的功能ID
* @return
* @version V1.0.0
* @date Jan 13, 2014 4:59:35 PM
*/
String value();

}
第三步:通过静态常量建立数据库中的功能ID与执行方法的一对一关系

[java] view plain
public class FuncConstants {

/**
* 系统管理-角色管理-增加角色
*/
public final static String Xtgl_Jsgl_AddJs = "";
/**
* 系统管理 - 部门管理- 部门列表
*/
public final static String Xtgl_Bmgl_BmList = "";

}

第四步:在SpringMVC拦截器中验证权限

[java] view plain
/**
* FreeMarker视图拦截器,页面展示之前做一些通用处理
* @version V1.0.0
* @date Dec 12, 2013 4:20:04 PM
*/
public class FreeMarkerViewInterceptor extends HandlerInterceptorAdapter {

public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {

}

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView view) throws Exception {
String contextPath = request.getContextPath();
if (view != null) {
request.setAttribute("base", contextPath);
}
}

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

//处理Permission Annotation,实现方法级权限控制
HandlerMethod method = (HandlerMethod)handler;
Permission permission = method.getMethodAnnotation(Permission.class);

//如果为空在表示该方法不需要进行权限验证
if (permission == null) {
return true;
}

//验证是否具有权限
if (!WebUtil.hasPower(request, permission.value())) {
response.sendRedirect(request.getContextPath()+"/business/nopermission.html");
return false;
}
return true;

//注意此处必须返回true,否则请求将停止
//return true;
}

}

至此,基于按钮、方法验证的细粒度权限体系完成!

㈥ web攻击有哪些怎么防护

1、DoS和DDoS攻击(DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击。其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击)
防范:(1) 反欺骗:对数据包的地址及端口的正确性进行验证,同时进行反向探测。(2) 协议栈行为模式分析:每个数据包类型需要符合RFC规定,这就好像每个数据包都要有完整规范的着装,只要不符合规范,就自动识别并将其过滤掉。(3) 特定应用防护:非法流量总是有一些特定特征的,这就好比即便你混进了顾客群中,但你的行为还是会暴露出你的动机,比如老重复问店员同一个问题,老做同样的动作,这样你仍然还是会被发现的。(4) 带宽控制:真实的访问数据过大时,可以限制其最大输出的流量,以减少下游网络系统的压力。
2、CSRF(Cross Site Request Forgery),即跨站请求伪造,是一种常见的Web攻击,但很多开发者对它很陌生。CSRF也是Web安全中最容易被忽略的一种攻击。
防范:(1) 验证码。应用程序和用户进行交互过程中,特别是账户交易这种核心步骤,强制用户输入验证码,才能完成最终请求。在通常情况下,验证码够很好地遏制CSRF攻击。但增加验证码降低了用户的体验,网站不能给所有的操作都加上验证码。所以只能将验证码作为一种辅助手段,在关键业务点设置验证码。(2) Referer Check。HTTP Referer是header的一部分,当浏览器向web服务器发送请求时,一般会带上Referer信息告诉服务器是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。可以通过检查请求的来源来防御CSRF攻击。正常请求的referer具有一定规律,如在提交表单的referer必定是在该页面发起的请求。所以通过检查http包头referer的值是不是这个页面,来判断是不是CSRF攻击。但在某些情况下如从https跳转到http,浏览器处于安全考虑,不会发送referer,服务器就无法进行check了。若与该网站同域的其他网站有XSS漏洞,那么攻击者可以在其他网站注入恶意脚本,受害者进入了此类同域的网址,也会遭受攻击。出于以上原因,无法完全依赖Referer Check作为防御CSRF的主要手段。但是可以通过Referer Check来监控CSRF攻击的发生。(3) Anti CSRF Token。目前比较完善的解决方案是加入Anti-CSRF-Token,即发送请求时在HTTP 请求中以参数的形式加入一个随机产生的token,并在服务器建立一个拦截器来验证这个token。服务器读取浏览器当前域cookie中这个token值,会进行校验该请求当中的token和cookie当中的token值是否都存在且相等,才认为这是合法的请求。否则认为这次请求是违法的,拒绝该次服务。这种方法相比Referer检查要安全很多,token可以在用户登陆后产生并放于session或cookie中,然后在每次请求时服务器把token从session或cookie中拿出,与本次请求中的token 进行比对。由于token的存在,攻击者无法再构造出一个完整的URL实施CSRF攻击。但在处理多个页面共存问题时,当某个页面消耗掉token后,其他页面的表单保存的还是被消耗掉的那个token,其他页面的表单提交时会出现token错误。
3、XSS(Cross Site Scripting),跨站脚本攻击。为和层叠样式表(Cascading Style Sheets,CSS)区分开,跨站脚本在安全领域叫做“XSS”。
防范:(1) 输入过滤。永远不要相信用户的输入,对用户输入的数据做一定的过滤。如输入的数据是否符合预期的格式,比如日期格式,Email格式,电话号码格式等等。这样可以初步对XSS漏洞进行防御。上面的措施只在web端做了限制,攻击者通抓包工具如Fiddler还是可以绕过前端输入的限制,修改请求注入攻击脚本。因此,后台服务器需要在接收到用户输入的数据后,对特殊危险字符进行过滤或者转义处理,然后再存储到数据库中。(2) 输出编码。服务器端输出到浏览器的数据,可以使用系统的安全函数来进行编码或转义来防范XSS攻击。在PHP中,有htmlentities()和htmlspecialchars()两个函数可以满足安全要求。相应的JavaScript的编码方式可以使用JavascriptEncode。(3) 安全编码。开发需尽量避免Web客户端文档重写、重定向或其他敏感操作,同时要避免使用客户端数据,这些操作需尽量在服务器端使用动态页面来实现。(4) HttpOnly Cookie。预防XSS攻击窃取用户cookie最有效的防御手段。Web应用程序在设置cookie时,将其属性设为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息。(5)WAF(Web Application Firewall),Web应用防火墙,主要的功能是防范诸如网页木马、XSS以及CSRF等常见的Web漏洞攻击。由第三方公司开发,在企业环境中深受欢迎。
4、SQL注入(SQL Injection),应用程序在向后台数据库传递SQL(Structured Query Language,结构化查询语言)时,攻击者将SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
防范:(1) 防止系统敏感信息泄露。设置php.ini选项display_errors=off,防止php脚本出错之后,在web页面输出敏感信息错误,让攻击者有机可乘。(2) 数据转义。设置php.ini选项magic_quotes_gpc=on,它会将提交的变量中所有的’(单引号),”(双引号),\(反斜杠),空白字符等都在前面自动加上\。或者采用mysql_real_escape()函数或addslashes()函数进行输入参数的转义。(3) 增加黑名单或者白名单验证。白名单验证一般指,检查用户输入是否是符合预期的类型、长度、数值范围或者其他格式标准。黑名单验证是指,若在用户输入中,包含明显的恶意内容则拒绝该条用户请求。在使用白名单验证时,一般会配合黑名单验证。
5、上传漏洞在DVBBS6.0时代被黑客们利用的最为猖獗,利用上传漏洞可以直接得到WEBSHELL,危害等级超级高,现在的入侵中上传漏洞也是常见的漏洞。该漏洞允许用户上传任意文件可能会让攻击者注入危险内容或恶意代码,并在服务器上运行。
防范: (1)检查服务器是否判断了上传文件类型及后缀。 (2) 定义上传文件类型白名单,即只允许白名单里面类型的文件上传。 (3) 文件上传目录禁止执行脚本解析,避免攻击者进行二次攻击。 Info漏洞 Info漏洞就是CGI把输入的参数原样输出到页面,攻击者通过修改输入参数而达到欺骗用户的目的。

㈦ SpringMVC的拦截器和过滤器的区别与联系

首先给介绍下过滤器和拦截器的区别:
(1)拦截器是基于Java的反射机制的,而过滤器是基于函数回调。
(2)拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
(3)拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
(4)拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
(5)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
(6)拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,
可以调用业务逻辑。
然后进行分析下:
1.过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处
理,并且在请求结束返回给前端这之间进行后期处理。

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("before...");
chain.doFilter(request, response);
System.out.println("after...");
}

chain.doFilter(request, response);这个方法的调用作为分水岭。事实上调用Servlet的doService()方法是在
chain.doFilter(request, response);这个方法中进行的。

2.拦截器是被包裹在过滤器之中的。

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}

a.preHandle()这个方法是在过滤器的chain.doFilter(request, response)方法的前一步执行,也就是在
[System.out.println("before...")][chain.doFilter(request, response)]之间执行。
b.preHandle()方法之后,在return ModelAndView之前进行,可以操控Controller的ModelAndView内容。
c.afterCompletion()方法是在过滤器返回给前端前一步执行,也就是在[chain.doFilter(request, response)]
[System.out.println("after...")]之间执行。
3.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法
中执行的。所以过滤器、拦截器、service()方法,dispatc()方法的执行顺序应该是这样的如下图:

㈧ ssm框架毕业答辩常见问题有哪些, 例如ssm如何实现数据库的连接

一、Spring常见问题

1、Spring 在ssm中起什么作用?

  • Spring:轻量级框架

  • 作用:Bean工厂,用来管理Bean的生命周期和框架集成。

  • 两大核心:

  • IOC/DI(控制反转/依赖注入) :把依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory

  • AOP:面向切面编程

  • 2、Spring的事务?

  • 编程式事务管理:编程方式管理事务,极大灵活性,难维护。

  • 声明式事务管理:可以将业务代码和事务管理分离,用注解和xml配置来管理事务。

  • 3、IOC 在项目中的作用?

    作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。

    4、Spring的配置文件中的内容?

  • 开启事务注解驱动

  • 事务管理器

  • 开启注解功能,并配置扫描包

  • 配置数据库

  • 配置SQL会话工厂,别名,映射文件

  • 不用编写Dao层的实现类

  • 5、Spring下的注解?

  • 注册

  • @Controller @Service @Component

  • 注入

  • @Autowired @Resource

  • 请求地址

  • @RequestMapping

  • 返回具体数据类型而非跳转

  • @ResponseBody

  • 6、Spring DI 的三种方式?

  • 构造器注入:通过构造方法初始化

  • <constructor-arg index="0" type="java.lang.String" value="宝马"></constructor-arg>

  • setter方法注入:通过setter方法初始化

  • <property name="id" value="1111"></property>

  • 接口注入

  • 7、Spring主要使用了什么模式?

  • 工厂模式:每个Bean的创建通过方法

  • 单例模式:默认的每个Bean的作用域都是单例

  • 代理模式:关于Aop的实现通过代理模式

  • 8、IOC,AOP的实现原理?

  • IOC:通过反射机制生成对象注入

  • AOP:动态代理

  • 二、SpringMvc常见问题

    1、SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?

  • 问题:单例模式,在多线程访问时有线程安全问题

  • 解决方法:不要用同步,在控制器里面不能写字段

  • 2、SpringMvc 中控制器的注解?

  • @Controller:该注解表明该类扮演控制器的角色

  • 3、@RequestMapping 注解用在类上的作用?

  • 作用:用来映射一个URL到一个类或者一个特定的处理方法上

  • 4、前台多个参数,这些参数都是一个对象,快速得到对象?

  • 方法:直接在方法中声明这个对象,SpringMvc就自动把属性赋值到这个对象里面

  • 5、SpringMvc中函数的返回值?

    String,ModelAndView,List,Set 等

    一般String,Ajax请求,返回一个List集合

    6、SpringMvc中的转发和重定向?

  • 转发: return:"hello"

  • 重定向 :return:"redirect:hello.jsp"

  • 7、SpringMvc和Ajax之间的相互调用?

    通过JackSon框架把java里面对象直接转换成js可识别的json对象,具体步骤如下:

    1、加入JackSon.jar

    2、在配置文件中配置json的映射

    3、在接受Ajax方法里面直接返回Object,list等,方法前面需要加上注解@ResponseBody

    8、SpringMvc的工作流程图?

    原理:

  • 通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory。

  • SqlSessionFactory开启一个SqlSession,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句。

  • 完成数据库的CRUD操作和事务提交,关闭SqlSession。

㈨ 过滤器和拦截器分别有什么作用

①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
http://blog.csdn.net/chenleixing/article/details/44573495

㈩ Java Web的一些面试问题求解答

1、一般封闭到框架中,自动提交false——调用action(数据库操作)——提交事务—关闭connection
2、重载:方法名相同,参数(个数或类型)不同(称之为签名不同)
3、要看代码,经验多的人写的代码逻辑性强,bug会比较少,速度快,考虑得比较周全
4、页面就jsp动态页面,一般由美工做好,需运态的地方从后台获取数据,运态显示,运行的时候会先转为servlet实际为servlet+html
5、记录在日志,如果方法由上级调用,往上抛
6、Junit在一个方法中就可以运行,运行你写的代码,和有没数据库没关系
7、不用框架的话就注意sql注入问题,框架的话hibernate要注意级联操作,ibatis注意假分页,一般做一个分页拦截器
8、测试的话要看要做哪些测试,还要看功能,写测试报告的话下个模版比较快两天
9、各种各样的问题,与需求不符,逻辑性错误,用户体验度方面的……
10、小了一个小组一周,中等的,一个小组三四个月,大的一个小组做一年多
11、做下一个项目,项目维护,部署方面一般由组长及领导负责
12、后台将信息反回前台,前台接收判断,提示错误信息
13、弄断点一般是为了找错,根据代码打,你想在哪一步暂停,查看,就在哪一步打,一般手动
14、异常要么try catch要么就往上抛
15、没写过
16、很少很eclipse,用myeclipse 5.5
17、用get方法
18、ssi是struts,spring,ibatis框架,C:controller/action ;M:实体类User;V:struts中xml映射的jsp页面
19、取出来equals比较下
20、如果是像new int[10]的话就有10个元素否则用A.length来看
21、不知道
22、用来记录日志,一般每天一个日志
23、编码?一般utf-8/gbk在eclipse设置整个项目格式
24、hibernate映射文件可以反转自动生成.hbm.xml文件,和spring整合的话.cfg.xml就不需要了配置在spring的配置文件里:
<bean id="mydataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/zhang?useUnicode=true&characterEncoding=utf8" />
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<bean id="mysessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="mydataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<!-- 开启二级缓存 -->
<prop key="jobernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
<property name="mappingResources">
<list>

<value>com/entity/User.hbm.xml</value>
<value>com/entity/Proct.hbm.xml</value>
<value>com/entity/Item.hbm.xml</value>
<value>com/entity/Category.hbm.xml</value>
<value>com/entity/Address.hbm.xml</value>
<value>com/entity/Order.hbm.xml</value>

</list>
</property>
</bean>
25、依情况而定
26、比如学生表t_stu和得分表t_score,t_score中的stuid对应t_stu中的主键id,那么stuid就是t_stu的外键,主键与外键关系为1对1或者1对多
27、#表示传进来的传数为一个字符串(如果字符串已有引号则不再加引号,如果没有引号则加上引号,为了防止sql注入),$表示按传入进来的字符串,不再进行判断
28、spring+hibernate中事物配置:
<!-- 定义事务管理 -->
<bean id="txtManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="mysessionFactory"></property>
</bean>
<!-- 定义一个通知,管理规则 -->
<tx:advice id="txtAdvice" transaction-manager="txtManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="NOT_SUPPORTED"/>
<tx:method name="get*" propagation="NOT_SUPPORTED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="within(com.tarena.dang..impl.*)" id="servicePointcut"/>
<!-- 将txtAdvice和切入点相结合 -->
<aop:advisor advice-ref="txtAdvice" pointcut-ref="servicePointcut"/>
</aop:config>
sprint+mybatis配置:
<!-- 事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置事务的传播特性 -->
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="edit*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="cancel*">PROPAGATION_REQUIRED</prop>
<prop key="*">readOnly</prop>
</props>
</property>
</bean>
29、用框架一般不会有sql注入,框架都有考虑到的,jdbc的话用PreparedStatement