㈠ jsp 過濾器攔截URL時,如何把URL後面參數加上
最近在做項目中,發現jsp的過濾器在獲取到攔截的URL時,得到的URL沒有加入URL後面的參數,這樣就造成在用response.sendRedirect時,無法加入後面的參數,本人研究後,發現可以這么解決,希望對大家有所幫助<pString currentURL = req.getRequestURI(); // 取得根目錄所對應的絕對路猜衫徑: java.util.Enumeration enumParam = req.getParameterNames(); StringBuffer condition = new StringBuffer("?"); boolean isHasCondition = false; while(enumParam.hasMoreElements()){ isHasCondition = true; String paramName = enumParam.nextElement(); condition.append(paramName); condition.append("="); condition.append(request.getParameter(paramName)); condition.append("&"); } if(isHasCondition){ currentURL += condition.toString(); }</p<p </橘兆仔p<圓汪p </p
㈡ jsp 過濾器攔截URL時,如何把URL後面參數加上求答案
最近在做項目中,發現jsp的過濾器在獲取到攔截的URL時,得到的URL沒有加入URL後面的參數,這樣就造成在用response.sendRedirect時,無法加入後面的參數,本人研究後,發現可以這么解決,希望對大家有所幫助<pString currentURL = req.getRequestURI(); // 取得根目錄所對應的絕對路徑: java.util.Enumeration enumParam = req.getParameterNames(); StringBuffer condition = new StringBuffer("?"); boolean isHasCondition = false; while(enumParam.hasMoreElements()){ isHasCondition = true; String paramName = enumParam.nextElement(); condition.append(paramName); condition.append("="); condition.append(request.getParameter(paramName)); condition.append("&"); } if(isHasCondition){ currentURL += condition.toString(); }</p<p </p<p </p
㈢ jsp防止直接通過url訪問沒有許可權的頁面
jsp防止直接通過url訪問是通過過濾器實現的。
過濾器內容:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String conString = "";
conString = req.getHeader("REFERER");//獲取父url--如果不是直接輸入的話就是先前的訪問過來的頁面,要是用戶輸入了,這個父url是不存在的
if("".equals(conString) || null==conString){ //判斷如空森果上一個目錄為空斗兆畝的話,說明是用戶直接輸入url訪問的
String servletPath = req.getServletPath();//當前請求url,去掉幾個可以直接訪問的頁面
if(servletPath.contains("index.jsp") || servletPath.contains("admin/login.jsp")){ //跳過index.jsp和登陸Login.jsp
chain.doFilter(request, response);
} else {
resp.sendRedirect("/ejuornal/index.jsp");//跳回首頁
}
} else {
chain.doFilter(request, response);
}
}
過濾器配置:
<猜姿?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>FilterPages</filter-name>
<filter-class>com.ejuornal.filter.FilterPages</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterPages</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
</web-app>
㈣ javaee 過濾器怎樣判斷輸入的url路徑是正確的,不正確則跳轉index.jsp
JSP 圖片無法顯示通常是由於以下原因:
1、文件路徑或文件名稱的問題,這需要驗證文件的路徑是否正確是否區分了大小寫。jsp路徑也是十分特殊的,相對路徑有時候是無效的,所以需要使用絕對路徑,路徑前使用<%=request.getContextPath() %>.
2、圖片的規格有問題,驗證的方式是:在文件管理器中滑鼠右鍵圖片,選擇打開方式IE,看是否能打開,能正常打開的圖片就沒有問題。
3、顯示圖片的代碼寫的不對。這里只能看到提問,看不到詳細,猜測可能會有這樣的錯誤,或者是調用標簽方式不正確,html有兩種調用圖片的方式,一種是圖片標簽直接做展示,另一種則是通過背景的形式展現,如下:
<img src="imagePath" />
<xxx style="background:url(imagePath);"></xxx>
<xxx style="background-image:imagePath;"></xxx>
4、被覆蓋。如果圖片因為被別的div或者其他html控制項蓋住了,就不會顯示正常了,可以通過IE瀏覽器點「F12」打開開發人員工具,在「HTML」選項卡下有個游標的圖標,點擊後再點擊頁面中葯顯示圖片的區域,開發人員工具的面板中的代碼塊就自動跳到該區域對應的代碼並且高亮顯示,這樣就可以知道是什麼將圖片覆蓋在後面了。出現此種情況需要先看是否兩個區域都正確,如果該覆蓋圖片的區塊是被擠到這里來的,則需要重新調整此區塊的位置,若是確實應該是和圖片重疊顯示的,則需要在圖片中添加樣式:z-index,數值比那個區塊大即可。
㈤ JSP過濾器這樣設置過濾一個次級路徑下的所有URL
/sites/*這樣就可以了,如果這個文件夾是某個子目錄的話還需要添加它的父目錄;
下面內是些例子
<url-pattern>:指定和過濾器關聯容的URL,為」/*」表示所有URL;
例子1:單個過濾器配置:容器將其應用於所有接收的請求
<url-pattern>/*</url-pattern>
例子2:過濾器應用到特定目錄或資源(文件)的配置:此容器只有在接收到對/mydocs目錄中的資源的請求時才會應用該過濾器。
<url-pattern>/mydocs/*</url-pattern>
㈥ 修改index.jsp改了後綴為html,配置的<url-pattern>是/*,過濾器卻不管用了
改成html後伺服器就會按純html文件來處理,也就是把文件內容不加任何處理原樣發送給客戶端瀏覽器,這樣過濾器肯定就不起作用了。
㈦ JSP中,過濾器的web.xml配置文件中指定過濾器應用的URL用什麼符號隔開。請指教!
不支持用符號隔開,如果想達到類似的效果,請配置兩個 <url-pattert> 節點即可。 GOOD LUCK!
㈧ 在JSP中,過濾器中的url-pattern要過濾的資源具體是什麼什麼是資源是具體的javaBean嗎
資源包括jsp,servlet,所有參與抄跳轉和傳值的文襲件,一般來說就是指業務層和邏輯層的文件,這個<url-pattern>?</url-pattern> ?是可以隨便寫的,但一般保證命名有意義.但上面有具體的映射,映射到某個文件中就是要對該文件做過濾,也可以使用前綴和後綴來模糊匹配一系列的文件(如*.do,x*y),也可以使用文件夾形式的匹配(/admin/*).
其實不用太糾結這個資源是什麼東西,如果你要來設置編碼方式的過濾器,那麼別想其他的路,直接/*
㈨ spring mvc 攔截器怎麼攔截jsp頁面
spring mvc 攔截器怎麼攔截jsp頁面
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="net.techfinger.yoyoapp.interceptor.AuthInterceptor" />
</mvc:interceptor>
你這個 是攔截帶 /jsp 的 .do請求
解決方案
用spring 的攔截器 去攔截 所有的 .do 請求,
然後寫一個 過濾器去攔截 所有的.jsp 的請求
這樣才能防止循環過濾
<!-- <servlet-mapping>
<servlet-name>Spring-Servlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping> -->
這種會把所有jsp請求過濾不推薦。
<filter>
<filter-name> loginFilter</filter-name>
<filter-class>
net.techfinger.yoyoapp.interceptor.CheckLoginFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>Spring-Servlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
public class CheckLoginFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
// 獲得用戶請求的URI
String path = request.getRequestURI();
String contextPath = request.getContextPath();
String url = path.substring(contextPath.length());Person person =SessionUtils.getPerson(request);if (person == null) {
response.sendRedirect(contextPath+"/person.do?method=tologin");
return;
}
if (person.getId()!=null&&person.getPassword()!=null) {
filterChain.doFilter(servletRequest, servletResponse);
return;
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
}
public class AuthInterceptor extends HandlerInterceptorAdapter {
private final static Logger log= Logger.getLogger(AuthInterceptor.class);@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HandlerMethod method = (HandlerMethod)handler;
Auth auth = method.getMethod().getAnnotation(Auth.class);
////驗證登陸超時問題 auth = null,默認驗證
if( auth == null || auth.verifyLogin()){
String baseUri = request.getContextPath();
String path = request.getServletPath();
Person person =SessionUtils.getPerson(request);if(person == null){
if(path.endsWith(".jsp")){
response.setStatus(response.SC_GATEWAY_TIMEOUT);
response.sendRedirect(baseUri+"/person.do?method=tologin");
return false;
}else{
response.setStatus(response.SC_GATEWAY_TIMEOUT);
Map<String, Object> result = new HashMap<String, Object>();
/* result.put("success", false);
result.put("logoutFlag", true);//登錄標記 true 退出
result.put("msg", "登錄超時.");
XmlUtil.sendMsg(response, result);*/
response.sendRedirect(baseUri+"/person.do?method=tologin");
return false;
}
}
}
//驗證URL許可權
if( auth == null || auth.verifyURL()){/*//判斷請求的url,是否包含在該角色的url里String methodName=request.getParameter("method");
String menuUrl = StringUtils.remove(request.getRequestURI(),request.getContextPath())+"?method="+methodName;
System.out.println(menuUrl);if(!SessionUtils.isAccessUrl(request, StringUtils.trim(menuUrl))){
//日誌記錄
String userMail = SessionUtils.getPerson(request).getLoginName();
String msg ="URL許可權驗證不通過:[url="+menuUrl+"][email ="+ userMail+"]" ;
log.error(msg);response.setStatus(response.SC_FORBIDDEN);
Map<String, Object> result = new HashMap<String, Object>();
result.put("success", false);
result.put("msg", "沒有許可權訪問,請聯系管理員.");
XmlUtil.sendMsg(response, result);
return false;}
*/}
return super.preHandle(request, response, handler);
}