hibernate hql,hibernate-validator

這篇文章給大家聊聊關于hibernate hql,以及hibernate-validator對應的知識點,希望對各位有所幫助,不要忘了收藏本站哦。java如何防止sql...
這篇文章給大家聊聊關于hibernate hql,以及hibernate-validator對應的知識點,希望對各位有所幫助,不要忘了收藏本站哦。
java如何防止sql注入
java防SQL注入,最簡單的辦法是杜絕SQL拼接,SQL注入攻擊能得逞是因為在原有SQL語句中加入了新的邏輯,如果使用PreparedStatement來代替Statement來執行SQL語句,其后只是輸入參數,SQL注入攻擊手段將無效,這是因為PreparedStatement不允許在不同的插入時間改變查詢的邏輯結構,大部分的SQL注入已經擋住了,在WEB層我們可以過濾用戶的輸入來防止SQL注入比如用Filter來過濾全局的表單參數
01importjava.io.IOException;
02importjava.util.Iterator;
03importjavax.servlet.Filter;
04importjavax.servlet.FilterChain;
05importjavax.servlet.FilterConfig;
06importjavax.servlet.ServletException;
07importjavax.servlet.ServletRequest;
08importjavax.servlet.ServletResponse;
09importjavax.servlet.http.HttpServletRequest;
10importjavax.servlet.http.HttpServletResponse;
11/**
12*通過Filter過濾器來防SQL注入攻擊
13*
14*/
15publicclassSQLFilterimplementsFilter{
16privateStringinj_str="'|and|exec|insert|select|delete|update|count|*|%
|chr|mid|master|truncate|char|declare|;|or|-|+|,";
17protectedFilterConfigfilterConfig=null;
18/**
19*Shouldacharacterencodingspecifiedbytheclientbeignored?
20*/
21protectedbooleanignore=true;
22publicvoidinit(FilterConfigconfig)throwsServletException{
23this.filterConfig=config;
24this.inj_str=filterConfig.getInitParameter("keywords");
25}
26publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
27FilterChainchain)throwsIOException,ServletException{
28HttpServletRequestreq=(HttpServletRequest)request;
29HttpServletResponseres=(HttpServletResponse)response;
30Iteratorvalues=req.getParameterMap().values().iterator();//獲取所有的表單參數
31while(values.hasNext()){
32String[]value=(String[])values.next();
33for(inti=0;i<value.length;i++){
34if(sql_inj(value[i])){
35//TODO這里發現sql注入代碼的業務邏輯代碼
36return;
37}
38}
39}
40chain.doFilter(request,response);
41}
42publicbooleansql_inj(Stringstr)
43{
44String[]inj_stra=inj_str.split("\\|");
45for(inti=0;i<inj_stra.length;i++)
46{
47if(str.indexOf(""+inj_stra[i]+"")>=0)
48{
學習資源
百度搜索圈T社區(www.aiquanti.com)免費視頻教程
hibernate和mybatis的區別
答:mybatis與hibernate一樣是個orm數據庫框架。它與hibernate區別是非常大的,有以下幾點:
總結起來:
mybatis:小巧、方便、高效、簡單、直接、半自動
hibernate:強大、方便、高效、復雜、繞彎子、全自動
1.hibernate是全自動,而mybatis是半自動。
hibernate完全可以自動生成sql。而mybatis僅有基本的字段映射,仍然需要通過手寫sql來實現和管理。
2.hibernate數據庫移植性遠大于mybatis。
hibernate通過它強大的映射結構和hql語言,大大降低了對象與數據庫(oracle、mysql等)的耦合性,而mybatis由于需要手寫sql,移植性也會隨之降低很多,成本很高。
3.hibernate擁有完整的日志系統,mybatis則欠缺一些。
hibernate日志系統非常健全,涉及廣泛,而mybatis則除了基本記錄功能外,功能薄弱很多。
4.mybatis相比hibernate需要關心很多細節
hibernate配置要比mybatis復雜的多,學習成本也比mybatis高。但也正因為mybatis使用簡單,才導致它要比hibernate關心很多技術細節。mybatis由于不用考慮很多細節,開發模式上與傳統jdbc區別很小,hibernate則正好與之相反。但是如果使用hibernate很熟練的話,實際上開發效率絲毫不差于甚至超越mybatis。
5.sql直接優化上,mybatis要比hibernate方便很多
由于mybatis的sql都是寫在xml里,因此優化sql比hibernate方便很多。而hibernate的sql很多都是自動生成的,無法直接維護sql;總之寫sql的靈活度上hibernate不及mybatis。
mybatis:
1.入門簡單,即學即用,提供了數據庫查詢的自動對象綁定功能。
2.可以進行更為細致的SQL優化,可以減少查詢字段。
3.缺點就是框架還是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,但是整個底層數據庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易適應快速數據庫修改。
4.二級緩存機制不佳。
hibernate:
1.功能強大,數據庫無關性好,O/R映射能力強。
2.有更好的二級緩存機制,可以使用第三方緩存。
3.缺點就是學習門檻不低,要精通門檻更高,而且怎么設計O/R映射,在性能和對象模型之間如何權衡取得平衡,以及怎樣用好Hibernate方面需要你的經驗和能力都很強才行。
舉個形象的比喻:
mybatis:機械工具,使用方便,拿來就用,但工作還是要自己來作
hibernate:智能機器人,但研發它(學習、熟練度)的成本很高,工作都可以擺脫他了,但僅限于它能做的事。
hibernate為什么要有方言HQL是什么
首先數據庫都是支持sql的,不過不同的數據庫會存在一些語法上面的差異,而方言則是解決hql翻譯成sql保證語法的正確。
hql則是基于對象的查詢語言,hibernate會結合對象的配置文件以及方言,將寫的hql翻譯成sql。至于為什么要這么做,假如系統需要數據庫的變換時,那么用hibernate的話就只需要改一改配置文件(修改連接字符串、驅動類、方言等),而用傳統的jdbc時,那么sql語言可能就要有很多改動,基本就是dao層重寫一遍吧。
“mybatis”和“hibernate”的區別是什么
mybatis與hibernate一樣是個orm數據庫框架。它與hibernate區別是非常大的,有以下幾點:
總結起來:
mybatis:小巧、方便、高效、簡單、直接、半自動
hibernate:強大、方便、高效、復雜、繞彎子、全自動
1.hibernate是全自動,而mybatis是半自動。
hibernate完全可以自動生成sql。而mybatis僅有基本的字段映射,仍然需要通過手寫sql來實現和管理。
2.hibernate數據庫移植性遠大于mybatis。
hibernate通過它強大的映射結構和hql語言,大大降低了對象與數據庫(oracle、mysql等)的耦合性,而mybatis由于需要手寫sql,移植性也會隨之降低很多,成本很高。
3.hibernate擁有完整的日志系統,mybatis則欠缺一些。
hibernate日志系統非常健全,涉及廣泛,而mybatis則除了基本記錄功能外,功能薄弱很多。
4.mybatis相比hibernate需要關心很多細節
hibernate配置要比mybatis復雜的多,學習成本也比mybatis高。但也正因為mybatis使用簡單,才導致它要比hibernate關心很多技術細節。mybatis由于不用考慮很多細節,開發模式上與傳統jdbc區別很小,hibernate則正好與之相反。但是如果使用hibernate很熟練的話,實際上開發效率絲毫不差于甚至超越mybatis。
5.sql直接優化上,mybatis要比hibernate方便很多
由于mybatis的sql都是寫在xml里,因此優化sql比hibernate方便很多。而hibernate的sql很多都是自動生成的,無法直接維護sql;總之寫sql的靈活度上hibernate不及mybatis。
mybatis:
1.入門簡單,即學即用,提供了數據庫查詢的自動對象綁定功能。
2.可以進行更為細致的SQL優化,可以減少查詢字段。
3.缺點就是框架還是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,但是整個底層數據庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易適應快速數據庫修改。
4.二級緩存機制不佳。
hibernate:
1.功能強大,數據庫無關性好,O/R映射能力強。
2.有更好的二級緩存機制,可以使用第三方緩存。
3.缺點就是學習門檻不低,要精通門檻更高,而且怎么設計O/R映射,在性能和對象模型之間如何權衡取得平衡,以及怎樣用好Hibernate方面需要你的經驗和能力都很強才行。
舉個形象的比喻:
mybatis:機械工具,使用方便,拿來就用,但工作還是要自己來作
hibernate:智能機器人,但研發它(學習、熟練度)的成本很高,工作都可以擺脫他了,但僅限于它能做的事。
java如何防sql攻擊
java防SQL注入,最簡單的辦法是杜絕SQL拼接,SQL注入攻擊能得逞是因為在原有SQL語句中加入了新的邏輯,如果使用PreparedStatement來代替Statement來執行SQL語句,其后只是輸入參數,SQL注入攻擊手段將無效,這是因為PreparedStatement不允許在不同的插入時間改變查詢的邏輯結構,大部分的SQL注入已經擋住了,在WEB層我們可以過濾用戶的輸入來防止SQL注入比如用Filter來過濾全局的表單參數。下面就舉三個例子來說明一下:
第一種:
采用預編譯語句集,它內置了處理SQL注入的能力,只要使用它的setString方法傳值即可,如下所示:
Stringsql="select*fromuserswhereusername=?andpassword=?;PreparedStatementpreState=conn.prepareStatement(sql);preState.setString(1,userName);preState.setString(2,password);ResultSetrs=preState.executeQuery();...
第二種:
采用正則表達式將包含有單引號('),分號(;)和注釋符號(--)的語句給替換掉來防止SQL注入,如下所示:
publicstaticStringTransactSQLInjection(Stringstr)
{
returnstr.replaceAll(".*([';]+|(--)+).*","");
}
userName=TransactSQLInjection(userName);
password=TransactSQLInjection(password);
Stringsql="select*fromuserswhereusername='"+userName+"'andpassword='"+password+"'"
Statementsta=conn.createStatement();
ResultSetrs=sta.executeQuery(sql);
第三種:
使用Hibernate框架的SQL注入防范Hibernate是目前使用最多的ORM框架,在JavaWeb開發中,很多時候不直接使用JDBC,而使用Hibernate來提高開發效率。
在Hibernate中,仍然不應該通過拼接HQL的方式,而應使用參數化的方式來防范SQL注入。有兩種方式,一種仍然是使用JDBC一樣的占位符“?”,但更好的方式是使用Hibernate的命名參數,例如檢測用戶名和密碼是否正確,使用Hibernate可以寫成如下:
StringqueryStr=“fromuserwhereusername=:username”+”password=:password”;
Listresult=session.createQuery(queryStr).setString("username",username).setString("password",password).list();
OK,本文到此結束,希望對大家有所幫助。
本文鏈接:http://xinin56.com/qianduan/3292.html