1. 程式人生 > >Struts2 過濾器實現只允許POST請求

Struts2 過濾器實現只允許POST請求

通過過濾器禁止get請求,寫了一個小demo,希望對有需要的朋友有幫助。

首先是jsp檔案,就是一個簡單的提交的對話方塊,程式碼如下:

	<form action="front/encode" method="get">
   		<input type="text" name="username"/>
   		<input type="submit" value="提交"/>
   	</form>
第二步配置了一下struts.xml,由於不需要返回介面,直接列印到頁面上了
    <package name="front" namespace="/front" extends="struts-default">
        <action name="encode" class="com.front.action.Test" method="encode"/>
    </package> 
第三步就是 Test.java檔案
	public void encode(){
		out.print(username);
		return;
	}
第四步寫了一個過濾器AccessFilter.java 我把它放在了com.service.security包下面 
package com.service.security;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AccessFilter implements Filter{

	@Override
	public void destroy() {
		System.out.println("destory");
	}

	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {
		System.out.println("filter");
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;     
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter(); 
		String path = request.getRequestURI();
		String method = request.getMethod();
		System.out.println(method);
		if (path.indexOf("/index.jsp")>-1) {
			System.out.println("index");
			filterChain.doFilter(request, response);
			return;
			}
		if ("GET".equals(method)) {
			System.out.println("it");
			out.print("Get is not allowed");
			return;
		}else {
			filterChain.doFilter(request, response);
			return;
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("init");
	}

}
最後還需要配置一下web.xml
  <filter>
    <filter-name>AccessFilter</filter-name>
    <filter-class>com.service.security.AccessFilter</filter-class>
  </filter>
   <filter-mapping>
    <filter-name>AccessFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping> 
  <!--  <filter-mapping>
    <filter-name>AccessFilter</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping> -->
   
      <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
  <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

演示一下:開始的時候是index.jsp是get提交方式

點選提交後顯示的是

我們在把提交方式改成post  點選提交的結果如下

大功告成,收工,哈哈~~~





在網上找了一些Struts2過濾器和攔截器的區別,感覺說的很通熟易懂,copy一下希望對大家有用:

(1)過濾器是在java web中,你傳入的request,response提前過濾掉一些資訊,或者提前設定一些引數,然後再傳入servlet或者struts的 action進行業務邏輯,
比如過濾掉非法url(不是login.do的地址請求,如果使用者沒有登陸都過濾掉),
或者在傳入servlet或者 struts的action前統一設定字符集,
或者去除掉一些非法字元(聊天室經常用到的,一些罵人的話)。。。

攔截器 可通過的是符合條件的action。 攔截器本身是一個普通的Java物件,它能動態攔截Action呼叫,
Action執行前後執行攔截器本身提供的各種個樣的Web專案需求。也可以阻止Action的執行,同時也可以提取
Action中可以複用的部分。

(2)使用struts2的攔截器必須有一個前提,就是必須經過action,如果你直接訪問頁面的話,攔截器就不會起作用了

(3)如果action不通過攔截器就找不到 action類 更不可能找到action裡面的方法了

順序:這是web.xml中的部分配置
<filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>*.action</url-pattern>
  </filter-mapping>
1.開啟物品器後 Java應用伺服器會自動解析xml檔案 
2.當頁面提交後先是通過攔截器將攔截所有的.action 然後找struct的配置檔案
3.通過配置檔案找到相應的action類及對應方法
4.執行action中的方法

get方式提交中文的亂碼問題問題

get方式提交的引數編碼,只支援iso8859-1編碼。
因此,如果裡面有中文。
在後臺就需要轉換編碼,如下
String zhongwen = request.getParameter("zhongwen");
zhongwen = new String(zhongwen.getBytes("iso8859-1"),"GBK");
前提是你頁面編碼就是GBK,如果是utf-8,那上面那句程式碼後面就改成utf-8

相關推薦

Struts2 過濾器實現允許POST請求

通過過濾器禁止get請求,寫了一個小demo,希望對有需要的朋友有幫助。 首先是jsp檔案,就是一個簡單的提交的對話方塊,程式碼如下: <form action="front/encode" method="get"> <input type=

ios網絡學習------3 用非代理方法實現異步post請求

erro form b2c enc 界面 關聯 error pre mut #pragma mark - 這是私有方法。盡量不要再方法中直接使用屬性,由於一般來說屬性都是和界面關聯的,我們能夠通過參數的方式來使用屬性 #pragma mark post登錄方法 -(v

PHP中使用CURL實現GET和POST請求

由於 protocol 對稱加密 即使 匯報 bst 接口 useragent 拷貝 一、什麽是CURL? cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 庫。使用php的cURL

利用Java實現GET和POST請求

三個類 Java建立代理連線物件 Java傳送Post請求 Java傳送Get請求 程式碼 Java建立代理連線物件 /** * 1.返回代理物件 * @param proxyIp * @param

java實現httpclient傳送post請求

需求:現在要在java後端介面中直接請求客戶提供的其他介面來獲取所需要的資料,那麼就需要用到httpclient來做,下面做一個實現以記錄... 第一步:匯入所需要的jar包並寫一個工具類 1.post請求工具類 因為我們需要的協議是https協議,所以我做了

PHP中使用cURL實現Get和Post請求的方法

data print str close arr 設置 高級特性 post數據 decode cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 庫。本文將介紹 cURL 的一些高級特

原生javascript實現ajax 傳送post請求

var postData = { "name1": "value1", "name2": "value2"}; postData = (function(obj){ // 轉成po

過濾器實現對controller層進行過濾

1、controller層的請求都已.do結束 package com.example.demo.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; imp

PHP-curl實現GET或POST請求

PHP-curl實現GET或POST請求 經常用的二個函式,很容易獲取目標網站資料,http或https協議都支援,可根據具體需求附帶表單,cookie。 GET請求: /** * curl模擬get進行 http 或 https url請求(可選cookie) * stri

Struts2 過濾器無法正常過濾.action請求

package cn.thinknet.filter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import

java實現HTTP的post請求 key-value格式與json格式的區別

之前寫過介面接收json格式的post請求,當時自己寫完以為可以適應各種報文的傳送,最近對方說要有個”content=傳送內容”,這不就是最簡單的post請求嗎,那直接用我之前寫的http://blog.csdn.net/do_finsh/article/det

JAVA實現HTTPS協議POST請求JSON報文

package https; import java.io.ByteArrayOutputStream;   import java.io.DataOutputStream;   import java.io.IOException;   import java.io.InputStream;   impo

C++ 簡單實現HTTP GET/POST 請求

轉載出處:詳情http://m.blog.csdn.net/article/details?id=16336713 HTTP(超文字傳輸協議)是一種客戶端與服務端的傳輸協議,最早用於瀏覽器和伺服器之間的通訊,後來因為其使用靈活、方便等特點,廣泛用於客戶端與服務端的通訊。文章

使用AsyncHttpClient 實現get和post請求

AsyncHttpClient簡介: AsyncHttpClient庫 基於Apache的HttpClient框架,是一個非同步的httpClient, 所有的http請求都在子執行緒中,但是callback執行的執行緒和建立這個callback的執行緒是同一個(也即主執

PHP中使用CURL實現GET和POST請求(詳細)

一、什麼是CURL? cURL 是一個利用URL語法規定來傳輸檔案和資料的工具,支援很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支援 cURL 庫。使用PHP的cURL庫可以簡單和有效地去抓網頁。你只需要執行一個指令碼,然後分析一下你所抓取的網頁,然

Python3用Tornado實現get或post請求示例

簡述 近日,有小夥伴諮詢python是如何快速封裝API介面的問題。因此,寫下此文。 如何提供get和post API # -*- coding:utf8 -*- import os import t

限定某個業務控制方法,允許GET或POST請求方式訪問

可以在業務控制方法前,指明該業務控制方法只能接收GET或POST的請求 @Controller @RequestMapping(value="/user") public class UserAction{ @RequestMapping(value="/add",method=Requ

C#利用 HttpWebRequest 類傳送post請求,出現“套接字(協議/網路地址/埠)允許使用一次”問題

宣告:問題雖然已經被解決,但是並沒有明白具體原理,歡迎大佬補充。   最近網站出現一個問題,在C#裡面使用  HttpWebRequest 類去傳送post請求,偶爾 會出現 “套接字(協議/網路地址/埠)只允許使用一次” 的異常,很明顯應該是埠被佔用。 原因排查: 1、

nginx允許get/post請求

# admin server start    server {        listen      ${admin.port} backlog=8192;        server_name ${domain};                proxy_http_ve

Apache、IIS、Nginx等絕大多數web服務器,都不允許靜態文件響應POST請求

ebr ons auth red stat getmethod eas scope decode 最近調用一個接口,發現httppost請求目標網站會出現405 狀態碼,原因為 Apache、IIS、Nginx等絕大多數web服務器,都不允許靜態文件響應POST請求 所以