當前位置:
首頁 > 知識 > SpringMVC+Mybatis搭建高性能安全站

SpringMVC+Mybatis搭建高性能安全站

SpringMVC+Mybatis搭建高性能安全站



實戰SpringMVC+Mybatis搭建高性能安全站點


最近公司後端程序員缺乏,我這個前端冒死受命玩起了JavaEE項目,藉助開源的力量(spring-shiro-training)搭建了一個JavaEE項目,經過改造成符合我們需要,主要是資料庫結構改動,下面簡單記錄一下Spring+MyBatis項目的一些玩法。


一、網站安全1.1 XSS跨站腳本

XSS又稱CSS,全稱Cross Site Script,跨站腳本攻擊,是Web程序中常見的漏洞,XSS屬於被動式且用於客戶端的攻擊方式,所以容易被忽略其危害性。其原理是攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當其它用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的。如,盜取用戶Cookie、破壞頁面結構、重定向到其它網站等。


一個簡單的例子,頁面名字叫test.jsp:


XSS測試 頁面內容:


請求下面鏈接就會出現問題了:


網頁鏈接


1.2 SQL注入


SQL Injection,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。


典型例子:


國內最大的程序員社區CSDN網站的用戶資料庫被黑客公開發布,600萬用戶的登錄名及密碼被公開泄露。


一個簡單的例子,比如請求連接獲取用戶信息

請求連接為:


通常代碼中會執行SQL語句:


select * from table_user where userId=$


假如SQL注入


請求連接為:


SQL會執行:


select * from table_user where userId=1 or 1=1


二、解決之道 ─ 使用HttpServletRequestWrapper類


定義一個Filter,使用HttpServletRequestWrapper類截獲並處理參數:


-->

-->


-->


-->


-->


-->


-->


-->


2.1 定義XssFilter過濾器類


package com.dunizb.demo.common;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class XssFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub }}


2.2 在web.xml中配置過濾器

XssFilter com.jikexueyuan.demo.common.XssFilter XssFilter *.html


2.3 使用HttpServletRequestWrapper攔截請求


package com.dunizb.demo.common;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public class XssHttpServletRequestWraper extends HttpServletRequestWrapper { public XssHttpServletRequestWraper(HttpServletRequest request) { super(request); } @Override public String getParameter(String name) { return clearXss(super.getParameter(name)); } @Override public String getHeader(String name) { return clearXss(super.getHeader(name)); } @Override public String[] getParameterValues(String name) { String[] values = super.getParameterValues(name); String[] newValues = new String[values.length]; for(int i =0; i< values.length; i++){ newValues[i] = clearXss(values[i]); } return newValues; } /** * 處理字元轉義 * @param value * @return */ private String clearXss(String value){ if (value == null || "".equals(value)) { return value; } value = value.replaceAll(""); value = value.replaceAll("\(", "(").replace("\)", ")"); value = value.replaceAll(" ", " "); value = value.replaceAll("eval\((.*)\)", ""); value = value.replaceAll("[\"\ ][\s]*javascript:(.*)[\"\ ]", """"); value = value.replace("script", ""); return value; }}


三、提升性能:使用Mybatis的二級緩存策略


一級緩存是SqlSession級別的緩存,MyBatis默認開啟一級緩存。


二級緩存是mapper級別的緩存,是多個SqlSession共享的,其作用域是mapper的同一個namespace,MyBatis默認沒有開啟二級緩存,需要在setting全局參數中配置開啟二級緩存。如果緩存中有數據就不用從資料庫中獲取,大大提高系統性能。


3.1 配置緩存


mybaits的二級緩存是mapper範圍級別,除了在SqlMapConfig.xml設置二級緩存的總開關,還要在具體的mapper.xml中開啟二級緩存。Mybatis緩存使用起來非常方便,三個配置就搞定:


第一個需要配置config.xml ,開啟緩存


第二個需要在M apper文件頭指定使用緩存

其中:


readOnly="true"則所有相同的SQL語句返回的是同一個對象,這樣有助於提高性能,但並發操作同一條數據時可能不安全,如果設置為false,則相同的SQL語句訪問的是cache中的副本。


size=500是指緩存多少個對象,默認值是1024。


flushInterval="{}"指定緩存過期的時間,單位為毫秒,默認是空,也就是說只要容量足夠永遠不會過期。


eviction="LRU"是緩存的淘汰演算法,默認演算法是最近最少使用演算法,也就是LRU。


第三個配置,在具體的SQ L語句處指定使用緩存,默認開啟


...


3.2 緩存策略


Mybatis有4個最常見的緩存策略:


LRU,最近最少使用,移除最長時間不被使用的對象,默認策略

FIFO,先進先出,按對象進入緩存的順序來移除它們


SOFT,軟引用,移除基於垃圾回收器狀態和軟引用規則的對象


WEAK,弱引用,更積極地移除基於垃圾收集器狀態和弱引用規則的對象


四、在Linux伺服器上部署項目


需要Linux操作系統具備如下環境:


JDK7+


Tomcat7+


MySQL5


Nginx


部署過程:

導出項目為war包,重命名為ROOT.war


上傳到伺服器Tomcat的webapps目錄


把本地的MySQL資料庫導入到伺服器上,把xxx.sql上傳到伺服器


創建資料庫:


連接資料庫:


顯示資料庫:


創建資料庫:


打開創建的資料庫:


執行xxx.sql文件:


顯示資料庫中的表:

退出MySQL:


定義Tomcat埠號為8080:


退出vi編輯器:


啟動Tomcat:,觀察日誌:


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

java第三季老師布置的作業:隨機字元串
Junit4使用學習 初步教程
程序員,你的強迫症是幾級?進來對號入座!

TAG:java學習吧 |

您可能感興趣

Synaptics前總裁Rick Bergman加盟AMD:助力高性能PC、遊戲和半定製業務
TARS為Spring Cloud 提供高性能的 RPC 能力
Spark Connected為AR/VR發布高性能線充電解決方案The Griffin
MySQL使用JPA+Hibernate的9個高性能技巧
Mercedes-AMG 正式發布GT 4-Door Coupé高性能轎跑
與滑板女神Leticia Bufoni暢聊音樂與運動BEATS隆重推出Powerbeats Pro:完全無線,高性能耳機
在Salesforce Lightning Experience提高性能和速度
杉岩統一存儲推出SandStone AgileStore高性能引擎
高性能的 PHP 封裝的 HTTP Restful 多線程並發請求庫-MultiHttp
FAIR 開源 Tensor Comprehensions,讓機器學習與數學運算高性能銜接
FAIR開源Tensor Comprehensions,讓機器學習與數學運算高性能銜接
Moi Composites推出適用於3D列印高性能零件的CFM工藝
高振頻與高性能的絕美展現:蕭邦Superfast Chrono Porsche 919 Black Edition計時腕錶
Facebook發布Tensor Comprehensions:自動編譯高性能機器學習核心的C+庫
位元組跳動開源高性能分散式訓練框架BytePS,支持PyTorch、TensorFlow等
All In One 高性能小主機,點歪技能樹的Intel NUC8i7BEH開箱評測
全新高性能跑鞋!adidas Solar Boost 海外官網上架
日產 Silvia S14:高性能的漂移 show car
Netty-整合Protobuf高性能數據傳輸
芝奇推出Trident Z Neo 焰光戟高性能內存:專為AMD Ryzen 3000系列優化