url过滤怎么解除_Shiro-实战(四)---过滤器机制

1 简介

Shiro使用了与Servlet一样的Filter接口进行扩展

629703235b1a2879a2df33a2836ad700.png

1.1 NameableFilter

fc0fee60bde62216bd6e6c830dda99cb.png

NameableFilter给Filter起个名字,如果没有设置默认就是FilterName 当我们组装拦截器链时会根据这个名字找到相应的拦截器实例

1.2 OncePerRequestFilter

268ed1c282afa82fc7c0679dc5edd219.png

用于防止多次执行Filter,也就是说一次请求只会走一次拦截器链 enabled属性:是否开启该拦截器,默认enabled=true表开启

1.3 ShiroFilter

23493e85d4f5a16214de2321bbd52eb1.png

整个Shiro的入口点,用于拦截需要安全控制的请求进行处理

1.4 AdviceFilter

0af1987f1636baccc5a64b7b47c75756.png

提供AOP风格的支持,类似于SpringMVC中的Interceptor - preHandler:类AOP前置增强 在拦截器链执行之前执行;如果返回true则继续拦截器链 否则中断后续的拦截器链的执行直接返回 进行预处理(如基于表单的身份验证、授权) - postHandle:类AOP后置返回增强 在拦截器链执行完成后执行 进行后处理(如记录执行时间之类的); - afterCompletion:类AOP后置最终增强 不管有没有异常都会执行 可以进行清理资源(如解除Subject与线程的绑定之类的)

1.5 PathMatchingFilter

0cc7df65089f51d08a512f10a64b0b53.png

提供基于Ant风格的请求路径匹配功能及拦截器参数解析的功能,如roles[admin,user]自动根据,分割解析到一个路径参数配置并绑定到相应的路径 - pathsMatch

ff0bde7b7758f90671279a4b5cb1187a.png

用于path与请求路径进行匹配的方法,如果匹配返回true - onPreHandle(待探讨)

a1097e4579c636ad30f74e0ff95203ba.png

在preHandle中,当pathsMatch匹配一个路径后,会调用onPreHandler方法并将路径绑定参数配置传给mappedValue;然后可以在这个方法中进行一些验证(如角色授权),如果验证失败可以返回false中断流程;默认返回true;也就是说子类可以只实现onPreHandle即可,无须实现preHandle。如果没有path与请求路径匹配,默认是通过的(即preHandle返回true)

1.6 AccessControlFilter

30a4c4f46e18e02cc02b038527d82dd2.png

提供访问控制的基础功能;比如是否允许访问/当访问拒绝时如何处理等 - isAccessAllowed

d0bb46f11a89aa679f27b9b1a1d9ba6c.png

表是否允许访问;mappedValue就是[urls]配置中拦截器参数部分,如果允许访问返回true,否则false - onAccessDenied

92f315d98078a32d692f368da70f2ef7.png

表当访问拒绝时是否已经处理 如果返回true表示需要继续处理 如果返回false表示该拦截器实例已经处理了,直接返回即可

onPreHandle会自动调用这两个方法决定是否继续处理

38fce59bd4663eeeea7313cf3a66a540.png

AccessControlFilter还提供了如下方法用于处理如登录成功后/重定向到上一个请求

void setLoginUrl(String loginUrl) //身份验证时使用,默认/login.jsp  
String getLoginUrl()  
Subject getSubject(ServletRequest request, ServletResponse response) //获取Subject实例  
boolean isLoginRequest(ServletRequest request, ServletResponse response)//当前请求是否是登录请求  
void saveRequestAndRedirectToLogin(ServletRequest request, ServletResponse response) throws IOException //将当前请求保存起来并重定向到登录页面  
void saveRequest(ServletRequest request) //将请求保存起来,如登录成功后再重定向回该请求  
void redirectToLogin(ServletRequest request, ServletResponse response) //重定向到登录页面

比如基于表单的身份验证就需要使用这些功能

f71656951d7888eeb0de1eaf55cd4134.png

到此基本的拦截器完结 若我们想进行访问控制就可以继承AccessControlFilter 若我们要添加一些通用数据我们可以直接继承PathMatchingFilter

2 过滤器链

2.1 简介

Shiro对Servlet容器的FilterChain进行了代理,即ShiroFilter在继续Servlet容器的Filter链的执行之前,通过ProxiedFilterChain对Servlet容器的FilterChain进行了代理 即先走Shiro自己的Filter体系,然后才会委托给Servlet容器的FilterChain进行Servlet容器级别的Filter链执行 Shiro的ProxiedFilterChain执行流程 - 先执行Shiro自己的Filter链 - 再执行Servlet容器的Filter链(即原始的Filter)

而ProxiedFilterChain是通过FilterChainResolver根据配置文件中[urls]部分是否与请求的URL是否匹配解析得到的

c8982ca89d45411a6c9f1c72357bb55a.png

即传入原始的chain得到一个代理的chain

Shiro内部提供了一个路径匹配的FilterChainResolver实现:PathMatchingFilterChainResolver 其根据[urls]中配置的url模式(默认Ant风格) 即根据过滤器链和请求的url是否匹配来解析得到配置的过滤器链 而PathMatchingFilterChainResolver内部通过FilterChainManager

607b293214a658f91b832ac421b3e068.png

维护过滤器链 比如DefaultFilterChainManager

f0daf498aa1397533fe32ca30768696f.png

维护着url模式与过滤器链的关系 因此我们可以通过FilterChainManager进行动态动态增加url模式与过滤器链的关系

DefaultFilterChainManager会默认添加org.apache.shiro.web.filter.mgt.DefaultFilter中声明的过滤器

7c6eb0ab2c7ca96d2731bd4ea7dbf951.png

2.2 注册自定义拦截器

IniSecurityManagerFactory/WebIniSecurityManagerFactory在启动时会自动扫描ini配置文件中的[filters]/[main]部分并注册这些拦截器到DefaultFilterChainManager 且创建相应的url模式与其拦截器关系链

如果想自定义FilterChainResolver,可以通过实现WebEnvironment接口完成

public class MyIniWebEnvironment extends IniWebEnvironment {  
    @Override  
    protected FilterChainResolver createFilterChainResolver() {  
        //在此处扩展自己的FilterChainResolver  
        return super.createFilterChainResolver();  
    }  
}

FilterChain之间的关系。如果想动态实现url-拦截器的注册,就可以通过实现此处的FilterChainResolver来完成,比如:

//1、创建FilterChainResolver  
PathMatchingFilterChainResolver filterChainResolver =  
        new PathMatchingFilterChainResolver();  
//2、创建FilterChainManager  
DefaultFilterChainManager filterChainManager = new DefaultFilterChainManager();  
//3、注册Filter  
for(DefaultFilter filter : DefaultFilter.values()) {  
    filterChainManager.addFilter(  
        filter.name(), (Filter) ClassUtils.newInstance(filter.getFilterClass()));  
}  
//4、注册URL-Filter的映射关系  
filterChainManager.addToChain("/login.jsp", "authc");  
filterChainManager.addToChain("/unauthorized.jsp", "anon");  
filterChainManager.addToChain("/**", "authc");  
filterChainManager.addToChain("/**", "roles", "admin");  

//5、设置Filter的属性  
FormAuthenticationFilter authcFilter =  
         (FormAuthenticationFilter)filterChainManager.getFilter("authc");  
authcFilter.setLoginUrl("/login.jsp");  
RolesAuthorizationFilter rolesFilter =  
          (RolesAuthorizationFilter)filterChainManager.getFilter("roles");  
rolesFilter.setUnauthorizedUrl("/unauthorized.jsp");  

filterChainResolver.setFilterChainManager(filterChainManager);  
return filterChainResolver;

此处自己去实现注册filter,及url模式与filter之间的映射关系 可以通过定制FilterChainResolver或FilterChainManager来完成诸如动态URL匹配的实现

然后再web.xml中进行如下配置Environment

<context-param>  
<param-name>shiroEnvironmentClass</param-name> <param-value>com.github.zhangkaitao.shiro.chapter8.web.env.MyIniWebEnvironment</param-value>  
</context-param>

2.3 自定义过滤器

通过自定义自己的过滤器可以扩展一些功能,诸如动态url-角色/权限访问控制的实现、根据Subject身份信息获取用户信息绑定到Request(即设置通用数据)、验证码验证、在线用户信息的保存等等,因为其本质就是一个Filter;所以Filter能做的它就能做

2.3.1 扩展OncePerRequestFilter

OncePerRequestFilter保证一次请求只调用一次doFilterInternal,即如内部的forward不会再多执行一次doFilterInternal:

public class MyOncePerRequestFilter extends OncePerRequestFilter {  
    @Override  
    protected void doFilterInternal(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {  
        System.out.println("=========once per request filter"); 
        chain.doFilter(request, response);  
    }  
}

然后再shiro.ini配置文件中

[main]  
myFilter1=com.sss.web.filter.MyOncePerRequestFilter  
#[filters]  
#myFilter1=com.sss.web.filter.MyOncePerRequestFilter  
[urls]  
/**=myFilter1

Filter可以在[main]或[filters]部分注册,然后在[urls]部分配置url与filter的映射关系

2.3.2 扩展AdviceFilter

AdviceFilter提供了AOP的功能,其实现和SpringMVC中的Interceptor思想一样

public class MyAdviceFilter extends AdviceFilter {  
    @Override  
    protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {  
        System.out.println("====预处理/前置处理");  
        return true;//返回false将中断后续拦截器链的执行  
    }  
    @Override  
    protected void postHandle(ServletRequest request, ServletResponse response) throws Exception {  
        System.out.println("====后处理/后置返回处理");  
    }  
    @Override  
    public void afterCompletion(ServletRequest request, ServletResponse response, Exception exception) throws Exception {  
        System.out.println("====完成处理/后置最终处理");  
    }  
}

shiro.ini配置

[filters]  
myFilter1=com.sss.web.filter.MyOncePerRequestFilter  
myFilter2=com.sss.web.filter.MyAdviceFilter  
[urls]  
/**=myFilter1,myFilter2

2.3.3 PathMatchingFilter

PathMatchingFilter继承了AdviceFilter,提供了url模式过滤的功能,如果需要对指定的请求进行处理,可以扩展PathMatchingFilter

public class MyPathMatchingFilter extends PathMatchingFilter {  
    @Override  
    protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {  
       System.out.println("url matches,config is " + Arrays.toString((String[])mappedValue));  
       return true;  
    }  
}
  • preHandle:会进行url模式与请求url进行匹配,如果匹配会调用onPreHandle;如果没有配置url模式/没有url模式匹配,默认直接返回true;
  • onPreHandle:如果url模式与请求url匹配,那么会执行onPreHandle,并把该拦截器配置的参数传入。默认什么不处理直接返回true。

shiro.ini配置

[filters]  
myFilter3=com.sss.web.filter.MyPathMatchingFilter  
[urls]  
/**= myFilter3[config]

/**就是注册给PathMatchingFilter的url模式,config就是拦截器的配置参数,多个之间逗号分隔,onPreHandle使用mappedValue接收参数值。

2.3.4 扩展AccessControlFilter

AccessControlFilter继承了PathMatchingFilter,并扩展了了两个方法

public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {  
    return isAccessAllowed(request, response, mappedValue)  
     || onAccessDenied(request, response, mappedValue);  
}
  • isAccessAllowed:即是否允许访问,返回true表示允许;
  • onAccessDenied:表示访问拒绝时是否自己处理,如果返回true表示自己不处理且继续拦截器链执行,返回false表示自己已经处理了(比如重定向到另一个页面)
public class MyAccessControlFilter extends AccessControlFilter {  
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {  
        System.out.println("access allowed");  
        return true;  
    }  
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {  
        System.out.println("访问拒绝也不自己处理,继续拦截器链的执行");  
        return true;  
    }  
}

shiro.ini配置

[filters]  
myFilter4=com.sss.web.filter.MyAccessControlFilter  
[urls]  
/**=myFilter4

2.3.5 基于表单登录过滤器

public class FormLoginFilter extends PathMatchingFilter {  
    private String loginUrl = "/login.jsp";  
    private String successUrl = "/";  
    @Override  
    protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {  
        if(SecurityUtils.getSubject().isAuthenticated()) {  
            return true;//已经登录过  
        }  
        HttpServletRequest req = (HttpServletRequest) request;  
        HttpServletResponse resp = (HttpServletResponse) response;  
        if(isLoginRequest(req)) {  
            if("post".equalsIgnoreCase(req.getMethod())) {//form表单提交  
                boolean loginSuccess = login(req); //登录  
                if(loginSuccess) {  
                    return redirectToSuccessUrl(req, resp);  
                }  
            }  
            return true;//继续过滤器链  
        } else {//保存当前地址并重定向到登录界面  
            saveRequestAndRedirectToLogin(req, resp);  
            return false;  
        }  
    }  
    private boolean redirectToSuccessUrl(HttpServletRequest req, HttpServletResponse resp) throws IOException {  
        WebUtils.redirectToSavedRequest(req, resp, successUrl);  
        return false;  
    }  
    private void saveRequestAndRedirectToLogin(HttpServletRequest req, HttpServletResponse resp) throws IOException {  
        WebUtils.saveRequest(req);  
        WebUtils.issueRedirect(req, resp, loginUrl);  
    }  

    private boolean login(HttpServletRequest req) {  
        String username = req.getParameter("username");  
        String password = req.getParameter("password");  
        try {  
            SecurityUtils.getSubject().login(new UsernamePasswordToken(username, password));  
        } catch (Exception e) {  
            req.setAttribute("shiroLoginFailure", e.getClass());  
            return false;  
        }  
        return true;  
    }  
    private boolean isLoginRequest(HttpServletRequest req) {  
        return pathsMatch(loginUrl, WebUtils.getPathWithinApplication(req));  
    }  
}

onPreHandle主要流程: - 首先判断是否已经登录过了,如果已经登录过了继续拦截器链即可; - 如果没有登录,看看是否是登录请求,如果是get方法的登录页面请求,则继续拦截器链(到请求页面),否则如果是get方法的其他页面请求则保存当前请求并重定向到登录页面; - 如果是post方法的登录页面表单提交请求,则收集用户名/密码登录即可,如果失败了保存错误消息到“shiroLoginFailure”并返回到登录页面; - 如果登录成功了,且之前有保存的请求,则重定向到之前的这个请求,否则到默认的成功页面

shiro.ini配置

[filters]  
formLogin=com.sss.web.filter.FormLoginFilter  
[urls]  
/test.jsp=formLogin  
/login.jsp=formLogin

启动服务器输入http://localhost:8080/sss/test.jsp测试时,会自动跳转到登录页面,登录成功后又会跳回到test.jsp页面。

此处可以通过继承AuthenticatingFilter实现,其提供了很多登录相关的基础代码。另外可以参考Shiro内嵌的FormAuthenticationFilter的源码,思路是一样的。

2.3.6 任意角色授权拦截器

Shiro提供roles拦截器,其验证用户拥有所有角色,没有提供验证用户拥有任意角色的拦截器。

public class AnyRolesFilter extends AccessControlFilter {  
    private String unauthorizedUrl = "/unauthorized.jsp";  
    private String loginUrl = "/login.jsp";  
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {  
        String[] roles = (String[])mappedValue;  
        if(roles == null) {  
            return true;//如果没有设置角色参数,默认成功  
        }  
        for(String role : roles) {  
            if(getSubject(request, response).hasRole(role)) {  
                return true;  
            }  
        }  
        return false;//跳到onAccessDenied处理  
    }  

    @Override  
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {  
        Subject subject = getSubject(request, response);  
        if (subject.getPrincipal() == null) {//表示没有登录,重定向到登录页面  
            saveRequest(request);  
            WebUtils.issueRedirect(request, response, loginUrl);  
        } else {  
            if (StringUtils.hasText(unauthorizedUrl)) {//如果有未授权页面跳转过去  
                WebUtils.issueRedirect(request, response, unauthorizedUrl);  
            } else {//否则返回401未授权状态码  
                WebUtils.toHttp(response).sendError(HttpServletResponse.SC_UNAUTHORIZED);  
            }  
        }  
        return false;  
    }  
}
  • 首先判断用户有没有任意角色,如果没有返回false,将到onAccessDenied进行处理;
  • 如果用户没有角色,接着判断用户有没有登录,如果没有登录先重定向到登录;
  • 如果用户没有角色且设置了未授权页面(unauthorizedUrl),那么重定向到未授权页面;否则直接返回401未授权错误码。

shiro.ini配置

[filters]  
anyRoles=com.sss.web.filter.AnyRolesFilter  
[urls]  
/test.jsp=formLogin,anyRoles[admin,user]  
/login.jsp=formLogin

此处可以继承AuthorizationFilter实现,其提供了授权相关的基础代码。另外可以参考Shiro内嵌的RolesAuthorizationFilter的源码,只是实现hasAllRoles逻辑。

3 默认过滤器

Shiro内置了很多默认的过滤器,比如身份验证、授权等相关的。默认拦截器可以参考org.apache.shiro.web.filter.mgt.DefaultFilter中的枚举过滤器:

0dd2095d89bf4c5a41153ebc555cc999.png

9f9bcba53275018a6374b052893d1c68.png

另外还提供了一个org.apache.shiro.web.filter.authz.HostFilter,即主机拦截器,比如其提供了属性:authorizedIps:已授权的ip地址,deniedIps:表示拒绝的ip地址;不过目前还没有完全实现,不可用。

这些默认的拦截器会自动注册,可以直接在ini配置文件中通过“拦截器名.属性”设置其属性

perms.unauthorizedUrl=/unauthorized

另外如果某个拦截器不想使用了可以直接通过如下配置直接禁用

perms.enabled=false
weixin_39870238
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
springboot过滤器排除掉一些url_理解这9大内置过滤器,才算是精通Shiro
weixin_39794340的博客
11-26 1109
小Hub领读:权限框架一般都是一堆过滤器、拦截器的组合运用,在shiro中,有多少个内置的过滤器你知道吗?在哪些场景用那些过滤器,这篇文章希望你能对shiro有个新的认识!别忘了,点个 [在看] 支持一下哈~前两篇原创shiro文章:1、极简入门,Shiro的认证与授权流程解析2、只需要6个步骤,springboot集成shiro,并完成登录我们都知道shiro是个认证权限框架,除了登录、退出...
十分钟带你轻松入门Shiro
yueyunyin的博客
09-14 256
首先集成Spring、SpringMVC和Shiro <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.18.RELEASE</version> </dependenc
shiro学习33-shiro的工具类-webUtils
m0_67401382的博客
08-24 657
saveRequest(ServletRequest request),将访问的request保存起来,但是注意仅仅保存了url,method和queryString(这个值在post方式提交时是空,所以如果是post时没用,不要保存,因为没法保存参数)redirectToSavedRequest重定向到以前保存的request的路径,但是注意这个方法只对get方式的有效,post方式无效。如果是get的方法会将参数传过去。这个类提供的很多方法对于我们的平时开发都很有帮助,并不仅仅是shiro内部的应用。
一个HTTPS转HTTP的Bug,他们忍了2年,原谅我无法接受,加班改了
程序新视界
11-24 2515
今天这篇文章给大家讲一个追查Bug的故事和过程。个人一直认为:事出反常必有妖,程序中的Bug也是如此。 希望通过这个Bug的排查故事,大家不仅能够学到一系列的知识点,同时也能学会如何解决问题,如何更加专业的做事。而解决问题的方式及思维比单纯的技术更加重要。 Let’s go! 故事的起因 刚接手新团队新项目没多久,在发布一个系统时,同事友善的提醒:发布xx系统时,在测试环境要注释掉一行代码,上线发布时再放开注释。 听此友善提醒,一惊:这又是什么黑科技啊?!在我的经验里,还没有什么系统需要这样处理,暗下决心要
shiro_attack-2.2.jar
12-17
shiro_attack-2.2.jar
FEBS-Shiro-mysql.zip_FEBS-Shiro-mysql_FebsProperties_W9AP_shiro
09-20
spring boot + shiro for quan xian guanli
shiro-core 低版本漏洞检测
01-31
shiro-core 低版本漏洞检测工具
shiro-core-1.7.1 jar
07-12
shiro shiro-core-1.7.1 jar shiro漏洞
mybatisplus-spring-boot_mybatis-plus整合_shiro_plus_
09-29
mybatis-plus shiro spring mybatis整合
shiro执行多个过滤器_Shiro过滤器源码
weixin_36338765的博客
01-12 324
过滤器Shiro还提供了过滤器,可以配置我们的过滤规则,过滤规则对顺序是有要求的,短路优先原则,也就是前面的适配成功之后,就不会再适配后面的规则了。Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能,直接查看DefaultFilter类。路径如下:org.apache.shiro.web.filter.mgtpublicenumDefaultFilter{an...
shiro执行多个过滤器_解决springboot整合shiro过滤器执行顺序的问题
weixin_39824223的博客
12-19 707
1.问题如下:springboot 整合shiro 后出现了 对静态资源(js,css,jpg)的也会进行拦截,但是我们的配置如下,,@BeanpublicShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager, MyFormAuthenticationFilter myFormAuthenticat...
authc过滤器 shiro_shiro架构分析初识Filer
weixin_39588542的博客
12-18 166
在1024这个日子里,祝广大程序员节日快乐!!!记录于凌晨4点的笔记,躺床上睡不着,打开电脑学Shiro。朦朦胧胧中梳理的,有些还不太清醒的样子...Shiro数据过滤器Shiro对Servlet容器的FilterChain进行了代理,即ShiroFilter在Servlet容器的Filter链的之前执行,通过ProxiedFilterChain对Servlet容器的FilterChai...
java中 shiro过滤器设置接口过滤权限
m0_54850467的博客
08-17 690
今天遇到一个需求,要求后台接口不验证权限也能请求成功,由于我们的后台框架是nacos微服务,所以想到直接去改nacos中该微服务的shiro配置,我们打开shiro-common.yml文件,内容如下。我们在filterChainDefinitionMap里面增加一条记录/getSysinfoConfig:anon,修改后如下。然后重启该接口所在的微服务,这样请求该接口就不会被拦截了。anon是匿名访问anonymous的简称。修改后,我们发布配置。...
spring boot整合shiroshiro过滤器介绍
热门推荐
无名剑
08-07 1万+
过滤器链条配置说明 1、一个URL可以配置多个Filter,使用逗号分隔 2、当设置多个过滤器时,全部验证通过,才视为通过 3、部分过滤器可指定参数,如perms,roles Shiro内置的FilterChain anon(org.apache.shiro.web.filter.authc.AnonymousFilter):例子/admins/**=anon 没有参数,表示可以匿...
shiro执行多个过滤器_shiro过滤器架构——Shiro学习(5)
weixin_27310417的博客
01-12 275
shiro过滤器组织非常庞大,如下图:NameableFilter代表的是命名规范,旨在为每一个过滤器命名。提供setName()和getName()接口。OncePerRequestFilter,确保在一次请求中只通过一次filter。定义了一个doFilterInternal()方法,表示本过滤器过滤逻辑。在执行过滤器链filterChain.doFilter(request, respo...
Shiro配置---基于spring框架
syviah的博客
06-11 467
Apache Shiro的配置主要分为部分:  对象和属性的定义与配置URL过滤器配置静态用户配置静态角色配置 其中,由于用户、角色一般由后台进行操作的动态数据,因此Shiro配置一般仅包含前两项的配置。  Apache Shiro的大多数组件是基于POJO的,因此我们可以使用POJO兼容的任何配置机制进行配置,例如:Java代码、Sping XML、YAML、JSON、in
springboot使用shiro配置多个过滤器和session同步案例
qq_41358574的博客
10-24 4418
案例代码来自ruoyi管理系统的shiro部分 知识点介绍 AccessControlFilter AccessControlFilter提供了访问控制的基础功能;比如是否允许访问/当访问拒绝时如何处理等: isAccessAllowed:表示是否允许访问;mappedValue就是[urls]配置中拦截器参数部分,如果允许访问返回true,否则false; onAccessDenied:表示当访问拒绝时是否已经处理了;如果返回true表示需要继续处理;如果返回false表示该拦截器实例已经处理了,将直接返
爬虫面试python
CSDN
09-27 7769
1. 什么是爬虫 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 2. 什么是URL URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。 3. Scrapy的优缺点 优点:scrapy 是异步的, 对于固定单个网站
shiro-550和shiro-721漏洞的异同点
最新发布
06-06
Shiro-550和Shiro-721漏洞都是Apache Shiro框架的安全漏洞,但它们的漏洞类型和漏洞影响不同。 Shiro-550漏洞是Apache Shiro框架中的一种远程代码执行漏洞,攻击者可以通过构造恶意的序列化数据包,触发远程代码...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 僵尸毁灭工程 服务器已停止运行,《僵尸毁灭工程》steam is not enabled错误解决方法... 27662
  • 苹果照片未删却不见了_iPhone手机照片不见的解决方法 13215
  • 开机未发现nvidia控制面板_Windows10或者其他操作系统开机提示“未发现NVIDIA控制面板,从Microsoft Store中安装NVIDIA控制面板”的解决办法... 10667
  • 服务器修改开机启动项,启动项设置_服务器开机启动项 8312
  • 如何对聚类结果进行分析_如何更合理地给聚类结果贴标签——由一个挖掘学生用户的项目说开去... 5372

大家在看

  • dive:一款按层分析docker镜像的工具 943
  • Ubuntu发送邮件功能在客户端如何设置自动?
  • Neo4j的安装(Windows/Linux) 151
  • 如何使用SSRFire自动扫描和发现SSRF漏洞
  • Pipeline管道自己的一点理解

最新文章

  • ipfs分布式存储网络服务器系统,IPFS分布式存储是什么意思 分布式云存储服务器详解...
  • 微商相册一直显示服务器偷懒,【小程序】微商个人相册多端小程序源码以及安装...
  • ios上传文件云服务器上,ios文件上传服务器
2021年147篇
2020年212篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司迪庆关键词按天收费武汉关键词排名武汉网页设计报价黄石关键词按天扣费临夏SEO按天收费无锡网站优化按天扣费推荐白银SEO按效果付费推荐海东百度竞价推荐喀什关键词按天收费价格赣州网站制作多少钱延边阿里店铺托管报价梅州阿里店铺运营推荐济南建站价格黄山网页制作多少钱承德seo排名报价忻州百姓网标王报价榆林百搜标王公司贺州SEO按天计费云浮网站改版价格安顺网站改版多少钱龙华关键词按天扣费多少钱西乡营销网站报价漳州seo网站优化多少钱苏州外贸网站设计多少钱巴中百度竞价包年推广推荐果洛外贸网站建设报价张掖百度竞价公司宜春百度竞价包年推广报价聊城营销型网站建设价格昆明高端网站设计价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化