<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
映射一个路径下的所有请求。
<servlet-mapping>
<servlet-name>EncodingFilter</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
需要注意的是,这种写法必须以/开头,写成与绝对路径的形式,即便是映射所有请求也要写成/*,不能简化成*。
映射结尾相同的一类请求。
<servlet-mapping>
<servlet-name>ControllerServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
需要注意的是,这种请求映射就不能指定某一路径了,它必须是以星号(*)开始字母结尾,不能写成/*.do的形式。
在配置拦截器、过滤器时,记下不需要被拦截的路径,如:<filter>
<filter-name>login</filter-name>
<filter-class>com.ahpu.oss.controller.LoginFilter</filter-class>
<init-param>
<param-name>ignorePath</param-name>
<param-value>/tologin.do,/login.do,/createImg.do</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
在
<init-param>
<param-name>ignorePath</param-name>
<param-value>/tologin.do,/login.do,/createImg.do</param-value>
</init-param>
里的路径就是不想被过滤的
首先在web.xml 配置 参数
<param-name>noLoginPaths</param-name> 参数名可自取
<filter><filter-name>LoginFilter</filter-name>
<filter-class>com.imooc.filter.LoginFilter</filter-class>
<init-param>
<param-name>noLoginPaths</param-name>
<param-value>login.jspfail.jspLoginServlet</param-value>
</init-param>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后在 Filter 中,创建一个 FilterConfig 的引用, 这个引用在init中初始化,并且能够通过它获取<init-param> 中的key和value ,
String noLoginPaths = config.getInitParameter("noLoginPaths")
然后通过判断用户请求的url 是否符合 noLoginPaths 中设置的不过滤选项,如果如何,就调用do.filter放行
关键代码 :
if(noLoginPaths!=null){String[] strArray = noLoginPaths.split("")
for (int i = 0 i < strArray.length i++) {
if(strArray[i]==null || "".equals(strArray[i]))continue
if(request.getRequestURI().indexOf(strArray[i])!=-1 ){
arg2.doFilter(arg0, arg1)
return
}
}
}
完整代码:
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
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.http.HttpSession
public class LoginFilter implements Filter {
private FilterConfig config
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0
HttpServletResponse response = (HttpServletResponse) arg1
HttpSession session = request.getSession()
String noLoginPaths = config.getInitParameter("noLoginPaths")
String charset = config.getInitParameter("charset")
if(charset==null){
charset = "UTF-8"
}
request.setCharacterEncoding(charset)
if(noLoginPaths!=null){
String[] strArray = noLoginPaths.split("")
for (int i = 0 i < strArray.length i++) {
if(strArray[i]==null || "".equals(strArray[i]))continue
if(request.getRequestURI().indexOf(strArray[i])!=-1 ){
arg2.doFilter(arg0, arg1)
return
}
}
}
if(session.getAttribute("username")!=null){
arg2.doFilter(arg0, arg1)
}else{
response.sendRedirect("login.jsp")
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
config = arg0
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)