Shiro路径模式排除
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shiro路径模式排除相关的知识,希望对你有一定的参考价值。
在我的shiro应用程序中,我想为除REST之外的所有路径定义AuthenticationFilter
。
即/rest/...
不会通过它,但其他一切都会。
我正在使用Shiro-Guice
所以我的过滤器设置是这种形式
addFilterChain("/rest/**" ,restFilter)
addFilterChain("/**", filter) //I want this one to work on everything except my rest filter
我看了关于Ant路径模式风格的this question,但似乎没有对正则表达式的支持。
答案
你不能这样做。 shiro的工作方式是按照配置顺序检查过滤器。它首先检查第一个过滤器,如果它无法进行身份验证,它将继续进行下一个过滤器。没有排除模式。
您可以编写自己的自定义shiro过滤器,拒绝授权de rest url。
我不知道它如何在guice中起作用,但在shiro.ini中你可以做类似的事情:
[main]
myfilter = UrlBasedAuthzFilter
restFilter = YourRestFilterClass
[urls]
/rest/** = restFilter
/** = myfilter
过滤类:
public class UrlBasedAuthzFilter extends AuthorizationFilter {
@Override
public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws IOException {
if (request.getServletContext().getContextPath().startsWith("/rest"){
return false;
}
return super.isAccessAllowed(request, response, mappedValue);
}
}
另一答案
@Bean("shiroFilter")
public ShiroFilterFactoryBean factory(DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
Map<String, Filter> filterMap = new LinkedHashMap<>();
filterMap.put("adminLoginFilter", new AdminLoginFilter());
filterMap.put("jwtAdminAuthcFilter", new JwtAdminAuthcFilter());
factoryBean.setFilters(filterMap);
factoryBean.setSecurityManager(securityManager);
factoryBean.setUnauthorizedUrl("/401");
Map<String, String> filterRuleMap = new LinkedHashMap<>();
filterRuleMap.put("/admin/auth/login","adminLoginFilter");
filterRuleMap.put("/admin/**", "jwtAdminAuthcFilter");
filterRuleMap.put("/401", "anon");
factoryBean.setFilterChainDefinitionMap(filterRuleMap);
return factoryBean;
}
以上是关于Shiro路径模式排除的主要内容,如果未能解决你的问题,请参考以下文章
如何在nodejs中获取文件夹大小,排除具有glob模式的某些路径?
C语言必会面试题(3耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)(代码片段