① 大哥,在springMVC下防禦xss漏洞。和sql注入的問題知道如何解決嗎
不知道你是想防哪種xss,存儲型?反射型?Dom型?
sql注入預防在編程時機可以做到,不要使用字元串拼接的sql語句,就可以做到
② 求springmvc 注入多個bean的方法
說明註解方式沒有問題,你先檢查你的拼寫有沒有問題,然後確定路徑都沒有問題,最後才是set get
還有
你的controller service 的配置怎麼能放到一起呢 他們引用都是不一樣的
參考這個:http://blog.csdn.net/jzhf2012/article/details/8463643 祝你好運朋友。
③ SpringMVC怎麼注入HttpServletResponse
springMVC4中獲取request和response對象有以下兩種簡單易用的方法:
1、在control層獲取
在control層中獲取HttpServletRequest和HttpServletResponse對象有以下兩種簡單方式:
1)通過方法參數直接在action類中獲取
@Controller
class Action{
@RequestMapping("/path")
public String getReqAndRes(HttpServletRequest request, HttpServletResponse response){
/** 相關業務代碼 此時可以直接使用request response對象 */
}
}
2)利用spring web提供的@ModelAttribute註解
@ModelAttribute放在類方法的參數前面表示引用Model中的數據
@ModelAttribute放在類方法上面則表示該Action類中的每個請求調用之前都會執行該方法,因此在此方法裡面可以做一些請求預處理,利用此特性就可以抽象出一個基本Action類,然後所有的Action類都繼承自這個基本Aciton類,在基本Action類裡面獲取相應的request、response、session對象:
public class BaseAction{
protected HttpServletRequest request;
protected HttpServletResponse response;
protected HttpSession session;
@ModelAttribute
public void setReqAndRes(HttpServletRequest request, HttpServletResponse response){
this.request = request;
this.response = response;
this.session = request.getSession();
}
/** 其他業務代碼 */
}
2、通過spring提供的RequestContextHolder在非contrller層獲取request和response對象
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
HttpServletResponse response = ((ServletWebRequest)RequestContextHolder.getRequestAttributes()).getResponse();
ServletContext context = ContextLoader.().getServletContext();
④ 過濾器和SpringMVC的攔截器的區別
過濾器和攔截器的區別:
①攔截器是基於Java的反射機制的,而過濾器是基於函數回調。
②攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
③攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
④攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
⑤在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
⑥攔截器可以獲取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()方法之後,在returnModelAndView之前進行,可以操控Controller的ModelAndView內容。
c.afterCompletion()方法是在過濾器返回給前端前一步執行,也就是在[chain.doFilter(request, response)][System.out.println("after...")]之間執行。
3.SpringMVC的機制是由同一個Servlet來分發請求給不同的Controller,其實這一步是在Servlet的service()方法中執行的。所以過濾器、攔截器、service()方法,dispatc()方法的執行順序應該是這樣的,大致畫了個圖:其實非常好測試,自己寫一個過濾器,一個攔截器,然後在這些方法中都加個斷點,一路F8下去就得出了結論。
⑤ SpringMVC實現依賴注入的幾個常用註解的用
1. @Component 是所有受Spring 管理組件的通用形式
2. @Repository 對應數據訪問層的Bean
3. @Service 對應業務層的Bean
4. @Controller 對應控制層的Bean
5. @Resource 默認按名稱來裝配注入,只有當找不到與名稱相匹配的bean時才會按照類型來裝配注入
6. @Autowired 默認按類型來裝配注入,如果想按照名稱來裝配注入,則需要結合@Qualifier一起使用
7. @Qualifier 默認按名稱來裝配注入
⑥ SpringMVC如何有效的防止XSS注入
在數據進入資料庫之前對非法字元進行轉義,在更新和顯示的時候將非法字元還原
在顯示的時候對非法字元進行轉義
如果項目還處在起步階段,建議使用第二種,直接使用jstl的<c:out>標簽即可解決非法字元的問題。當然,對於Javascript還需要自己處理一下,寫一個方法,在解析從伺服器端獲取的數據時執行以下escapeHTML()即可。
附:Javascript方法:
String.prototype.escapeHTML = function () {
return this.replace(/&/g, 『&』).replace(/>/g, 『>』).replace(/</g, 『<』).replace(/」/g, 『"』);}
如果項目已經開發完成了,又不想大批量改動頁面的話,可以採用第一種方法,此時需要藉助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils
public class StringEscapeEditor extends PropertyEditorSupport {
private boolean escapeHTML;
private boolean escapeJavaScript;
private boolean escapeSQL;
public StringEscapeEditor() { super(); }
public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {super();this.escapeHTML = escapeHTML;
this.escapeJavaScript = escapeJavaScript;
this.escapeSQL = escapeSQL;}@Overridepublic void setAsText(String text) {
if (text == null) {
setValue(null);} else {String value = text;
if (escapeHTML) { value = StringEscapeUtils.escapeHtml(value); }
if (escapeJavaScript) { value = StringEscapeUtils.escapeJavaScript(value); }
if (escapeSQL) { value = StringEscapeUtils.escapeSql(value); } setValue(value); }}@Overridepublic String getAsText() { Object value = getValue(); return value != null ? value.toString() : 「」; }}
在上面我們做了一個EscapeEditor,下面還要將這個Editor和Spring的Controller綁定,使伺服器端接收到數據之後能夠自動轉移特殊字元。
下面我們在@Controller中注冊@InitBinder
@InitBinder
public void initBinder(WebDataBinder binder) {
這個方法可以直接放到abstract Controller類中,這樣子每個Controller實例都能夠擁有該方法。
⑦ SpringMVC注入service
1、首先需要到spring-servlet.xml配置
<!-- 啟用spring mvc 註解 -->
<context:annotation-config />
<!-- 設置使用註解的類所在的jar包 -->
<context:component-scan base-package="controller"></context:component-scan>
<!-- 完成請求和註解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation." />
2、Controller使用@Controller進行標記
3、service注入用下面的方式
@Autowired
private Service service;
4、方法映射用下面的方式
@RequestMapping(value = "/aaa")
⑧ springmvc中filter怎麼注入service
獲取applicationContext,然後自己載入bean。
ServletContext context = request.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils
.getWebApplicationContext(context);
ArticleInfoService articleinfoService = (ArticleInfoService) ctx
.getBean("yourServiceName");
⑨ 在js中給springmvc注入對象怎麼注入不進去
是的,
如果你 @Resource(name="xxxxxx") xxxxx需要和@service上的值相同
如果你只寫 @Resource,會按照類型注入, 子類類型也會被注入
⑩ 請教SpringMVC 中 Autowired 注入報錯
么有找到要注入的bean
你的配置有問題吧
<context:component-scan base-package="myforum.,myforum.service" />
有這樣的寫法嗎?
不想掃描某個包使用 表達式過濾掉就可以了。
spring 中的自動掃描中加入
<context:component-scan base-package="myforum" >
<context:exclude-filter type="regex" expression="myforum.controller.*" />
</context:component-scan>
排除掉就可以了吧。你試試
提供的都是半截代碼,實在是沒法判斷