當前位置:首頁 » 文件傳輸 » 過濾器對jsp的訪問請求無法攔截
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

過濾器對jsp的訪問請求無法攔截

發布時間: 2022-10-15 00:37:06

① jsp中過濾器可以攔截請求和響應嗎

過濾器可以動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息。

② 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);

}

③ 各位大神,springmvc自定義攔截器沒有攔截到後台的jsp頁面,如何解決這個問題

會提交的時候也要以/admin/*.jsp的方式提交啊
如果這樣不行,你可以攔截所有請求,然後再攔截器裡面判斷url裡面是否有你需要攔截的url地址,如果有的話就可以跳轉到制定的頁面,如果沒有放行就行了。
//獲取當前的Url地址
preHandle方法裡面:
String requestUrl = request.getRequestURI().replace(request.getContextPath(), "");
判斷這個requestUrl

④ springMVC的攔截器不攔截直接訪問jsp的請求

你好,分享一下我的攔截器,多多指教,代碼如下:

在spring的配置文件裡面進行配置攔截器

<!-- 攔截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 對所有的請求攔截使用/**-->
<mvc:mapping path="/**" />
<ref bean="userAccessInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
<bean id="userAccessInterceptor"class="com.web.interceptor.UserAccessInterceptor"></bean>

攔截器如下設置,當用戶未登錄時,返回到登錄頁面
class UserAccessInterceptor extends HandlerInterceptorAdapter {

@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
//靜態資源直接return true
if(handler instanceof ResourceHttpRequestHandler){
return true;
}
if(Utils.isNull(UserCookie.getApploginUserId())){
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
return true;
}

⑤ 請問,java高手,spring mvc攔截器如何攔截所有的請求啊,包括html和jsp頁面

web.xml裡面這樣配置 他就攔截所有請求了
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

⑥ struts2用過濾器過濾非法jsp請求的時候,對於根文件夾下的請求如何過濾

<filter>
<filter-name>authority</filter-name>
<filter-class>com.bstek.test.demo.filter.AuthorityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authority</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--可以匹配多個的,不過只要上面那種就可以攔截所有的了<filter-mapping>
<filter-name>authority</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>-->

⑦ java怎麼實現對某些需要登錄才能查看的頁面進行攔截不需要登錄的jsp頁面不需要攔截!請高手賜教!

如果是簡單的頁面許可權控制,採用過濾器完全就可以實現了。 實現思路:
1. 設計需要許可權訪問的頁面存放在指定的目錄,如: /A/xxx.JSP 。 不需要登錄訪問的頁面則不存放在A目錄下
2. 自己寫個過濾器, 過濾器攔截的URL為 /A/* (url-mapping的配置); 過濾器的邏輯是,只有登錄的請求,才forward請求的頁面,沒有登錄的請求則跳轉到登陸頁面

如果是復雜的許可權控制,可以考慮採用spring security 組件來實現,從而節省開發時間

⑧ 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);

}

⑨ struts2攔截器怎麼攔截對jsp頁面的訪問

filter也可以攔截action啊,只要你把自己編寫的 filter過濾器放到Struts2.0的過濾器前面就行了

⑩ Java:現在Filter把所有請求都攔截了,怎麼使Filter不過濾login.jsp頁面呢

對於這種,我說兩種方法:

1、將你所有的JSP頁面單獨放在一個文件夾里(假如jspPage),jspPage文件夾里可根據類別分若乾子文件夾,再把相對應的JSP放在子文件夾里;
JS、CSS及圖片等分別放在外面的文件夾里(與文件夾jspPage並列)
再:<url-pattern>/jspPage/*</url-pattern>就行了
一般用的就是這種

2、在過濾的JAVA文件中,在doFilter方法里進行判斷,將後綴名為.css、.js等直接設置為通過就行了,這種較為復雜,在一些特殊情況下才用到,一般不