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第三季老師布置的作業:隨機字元串
※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系列優化