当前位置: 首页 > news >正文

携程网站联盟如何在国外网站开发新客人

携程网站联盟,如何在国外网站开发新客人,网站优化协议,石家庄企业建站哪家好默认情况下#xff0c;过滤器不支持排除特定的URL模式#xff0c;每当您为过滤器定义URL模式时#xff0c;任何与该模式匹配的请求都将由过滤器无例外处理。 从过滤器中排除URL的最简单方法是将过滤器映射到非常特定的模式。 在早期开发阶段完成此操作是可行的#xff0c;… 默认情况下过滤器不支持排除特定的URL模式每当您为过滤器定义URL模式时任何与该模式匹配的请求都将由过滤器无例外处理。 从过滤器中排除URL的最简单方法是将过滤器映射到非常特定的模式。 在早期开发阶段完成此操作是可行的但是如果您在生产环境中修改现有过滤器的URL模式则可能是一个繁琐的过程因为您必须重新映射所有现有servlet URL以实现您的目的。 在本教程中我们将展示如何以编程方式向现有过滤器添加排除功能。 1-自定义过滤器 自定义过滤器是您可以控制的过滤器。 即您拥有修改其源代码的所有权利。 假设我们有一个现有的Web应用程序该应用程序通过LDAP验证用户请求。 所有servlet请求都通过LDAPAuthenticationFilter传递该映射映射到/ * 如下所示 filterfilter-nameLDAPAuthenticationFilter/filter-namefilter-classcom.programmer.gate.filters.LDAPAuthenticationFilter/filter-class /filter filter-mappingfilter-nameLDAPAuthenticationFilter/filter-nameurl-pattern/*/url-pattern /filter-mapping 我们的过滤器仅对请求进行身份验证然后调用chain.doFilter LDAPAuthenticationFilter.java package com.programmer.gate.filters;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;public class LDAPAuthenticationFilter implements Filter{public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {// Authenticate the request through LDAPSystem.out.println(Authenticating the request through LDAP);// Forward the request to the next filter or servlet in the chain.chain.doFilter(req, resp);}public void init(FilterConfig filterConfig) throws ServletException {}public void destroy() {// TODO Auto-generated method stub} } 现在假设我们要创建一个servlet它需要简单的数据库身份验证并且不需要通过LDAP。 我们首先想到的是创建一个新的过滤器并将其映射到新servlet的特定URL模式。 因此我们创建了一个名为DatabaseAuthenticationFilter的新过滤器该过滤器仅通过数据库对请求进行身份验证并随后调用chain.doFilter package com.programmer.gate.filters;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;public class DatabaseAuthenticationFilter implements Filter{public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {// Authenticate the request through database then forward the request to the next filter or servlet in the chainSystem.out.println(Authenticating the request through database);chain.doFilter(req, resp);}public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}public void destroy() {// TODO Auto-generated method stub} } 我们在web.xml下定义过滤器以仅处理以/ DatabaseAuthenticatedServlet开头的特定URL filterfilter-nameDatabaseAuthenticationFilter/filter-namefilter-classcom.programmer.gate.filters.DatabaseAuthenticationFilter/filter-class /filter filter-mappingfilter-nameDatabaseAuthenticationFilter/filter-nameurl-pattern/DatabaseAuthenticatedServlet/*/url-pattern /filter-mapping 这里的问题是像/ DatabaseAuthenticatedServlet之类的请求也将匹配根URL模式“ / *”即我们的请求将通过2个身份验证过程 LDAP和Database其排序取决于首先在web.xml下定义哪个过滤器。 为了解决此问题我们需要修改LDAPAuthenticationFilter 以排除以/ DatabaseAuthenticatedServlet开头的URL 。 人们通常要做的是在doFilter方法中静态检查请求的servlet URL并在找到时简单地绕过身份验证过程。 在这里我们进一步走了一步实现了一个更加动态的解决方案该解决方案使我们可以通过web.xml管理排除的URL。 以下是将排除功能添加到LDAPAuthenticationFilter的步骤 添加名为List String类型的名为excludeUrls的新字段 private List excludedUrls; 里面的init方法读取配置属性使用一个FilterConfig称为excludedUrls属性应该是逗号分隔使我们排除尽可能多的网址因为我们需要。 public void init(FilterConfig filterConfig) throws ServletException {String excludePattern filterConfig.getInitParameter(excludedUrls);excludedUrls Arrays.asList(excludePattern.split(,)); } 修改doFilter以检查请求的URL是否属于预定义的排除URL列表如果是则只需将请求转发到链中的下一个过滤器或servlet否则执行身份验证逻辑。 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {String path ((HttpServletRequest) req).getServletPath();if(!excludedUrls.contains(path)){// Authenticate the request through LDAPSystem.out.println(Authenticating the request through LDAP);}// Forward the request to the next filter or servlet in the chain.chain.doFilter(req, resp); } 现在在web.xml内部您可以控制从LDAP身份验证中排除的URL而无需任何代码更改 filterfilter-nameLDAPAuthenticationFilter/filter-namefilter-classcom.programmer.gate.filters.LDAPAuthenticationFilter/filter-classinit-paramparam-nameexcludedUrls/param-name!-- Comma separated list of excluded servlets --param-value/DatabaseAuthenticatedServlet,/UnAuthenticatedServlet/param-value/init-param /filter 添加排除功能后 LDAPAuthenticationFilter如下所示 package com.programmer.gate.filters;import java.io.IOException; import java.util.Arrays; import java.util.List;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;public class LDAPAuthenticationFilter implements Filter{private List excludedUrls;public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {String path ((HttpServletRequest) req).getServletPath();if(!excludedUrls.contains(path)){// Authenticate the request through LDAPSystem.out.println(Authenticating the request through LDAP);}// Forward the request to the next filter or servlet in the chain.chain.doFilter(req, resp);}public void init(FilterConfig filterConfig) throws ServletException {String excludePattern filterConfig.getInitParameter(excludedUrls);excludedUrls Arrays.asList(excludePattern.split(,));}public void destroy() {// TODO Auto-generated method stub} }2-第三方过滤器 第三方过滤器是您无法控制的过滤器。 即您不能修改其源代码。 在本节中我们将对示例进行一些更改并使用CAS身份验证代替LDAP。 这就是我们在web.xml中定义CAS身份验证过滤器的方式 filterfilter-nameCAS Authentication Filter/filter-namefilter-classorg.jasig.cas.client.authentication.AuthenticationFilter/filter-classinit-paramparam-namecasServerLoginUrl/param-nameparam-valuehttps://localhost:8443/cas/login/param-value/init-paraminit-paramparam-nameserverName/param-nameparam-valuelocalhost/param-value/init-param /filter filter-mappingfilter-nameCAS Authentication Filter/filter-nameurl-pattern/*/url-pattern /filter-mapping CAS身份验证是通过第三方库完成的现在为了支持数据库身份验证我们无法像在上一个LDAP示例中那样修改CAS的源代码。 从第三方过滤器中排除URL的解决方案是使用新的自定义过滤器对其进行包装该过滤器仅添加了exclude功能并将过滤器逻辑委托给包装的类。 以下是将排除功能添加到CAS身份验证的步骤 创建一个名为CASCustomAuthenticationFilter的新过滤器如下所示 public class CASCustomAuthenticationFilter implements Filter{private AuthenticationFilter casAuthenticationFilter new AuthenticationFilter();private List excludedUrls;public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {String path ((HttpServletRequest) req).getServletPath();if(!excludedUrls.contains(path)){// Authenticate the request through CAScasAuthenticationFilter.doFilter(req,resp,chain);}// Forward the request to the next filter or servlet in the chain.chain.doFilter(req, resp);}public void init(FilterConfig arg0) throws ServletException {String excludePattern filterConfig.getInitParameter(excludedUrls);excludedUrls Arrays.asList(excludePattern.split(,));casAuthenticationFilter.init();}public void destroy() {casAuthenticationFilter.destroy();} } 我们的自定义过滤器通过构成将CAS身份验证过滤器包装起来其主要目的是仅管理要通过CAS进行身份验证的URL而我们没有涉及CAS身份验证过程。 在web.xml中 我们将过滤器定义更改为使用CASCustomAuthenticationFilter而不是默认的CAS实现 filterfilter-nameCAS Authentication Filter/filter-namefilter-classcom.programmer.gate.filters.CASCustomAuthenticationFilter/filter-classinit-paramparam-namecasServerLoginUrl/param-nameparam-valuehttps:localhost:8443/cas/login/param-value/init-paraminit-paramparam-nameserverName/param-nameparam-valuelocalhost/param-value/init-paraminit-paramparam-nameexcludeUrls/param-nameparam-value/DatabaseAuthenticatedServlet/param-value/init-param /filter filter-mappingfilter-nameCAS Authentication Filter/filter-nameurl-pattern/*/url-pattern /filter-mapping 就是这样请在下面的评论部分中留下您的想法。 翻译自: https://www.javacodegeeks.com/2018/04/how-to-exclude-a-url-from-a-filter.html
http://wiki.neutronadmin.com/news/37940/

相关文章:

  • 高新技术企业申报网站网站带薪歌手都要怎样做呀
  • 常州网站开发培训软件合集软件资料2023
  • 番禺网站建设番禺网络营销江苏省住房和城乡建设局
  • 做小说网站做国外域名还是国内的好吉安市建设技术培训中心网站
  • 原平新闻热点头条wordpress 优化seo
  • 综合型企业网站有哪些天津手机网站制作
  • 帝国+只做网站地图重庆人居建设集团网站
  • 为什么网站在本地看没问题上传之后没有内容呢?搬搬屋源码网
  • 阳江网站制作公司阿里巴巴国际站做2个网站有用
  • 网站推广与维护设计方案百度竞价员
  • 亚马逊关键词排名查询工具徐州整站优化
  • 成都家具网站建设wordpress英文
  • 大型门户网站有哪些作风建设提升年活动网站
  • 化妆品网站制作需要中企动力邮箱app
  • 专业制作网站装修公司电话号码大全
  • 网站后缀co注册公司代理记账费用
  • 站长做旅游网站上海十大公司排名
  • 网站页面优化简单吗学校网站怎么做
  • jquery素材网站网站建设的基本需求有哪些
  • 制作一个网站能多少钱链接缩短网址
  • 自己建设网站步骤产品外观设计的重要性
  • 哪些网站容易做三星网上商城打不开
  • 有些网站做不了seo山东省建设厅网站维护电话
  • 云南网站建设维修公司wordpress 分享 可见
  • 个人网站的建设目标百度托管公司
  • 公司 网站建正规的拼多多运营哪里找
  • 可以做内容的网站网站建设好后 如何验收
  • 怎样做才能让百度搜到网站产品电子商务网站搭建方案
  • 资讯平台网站模板网站建设虚拟空间
  • 网站不备案可以做百度竞价吗神童预言新冠2023结束