四种权限控制方式
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shirFilter(DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 拦截器。匹配原则是最上面的最优先匹配
Map<String,String> filterChainDefinitionMap = new LinkedHashMap<String,String>();
// 配置不会被拦截的链接
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/register", "anon");
filterChainDefinitionMap.put("/user/login", "anon");
filterChainDefinitionMap.put("/user/register", "anon");
filterChainDefinitionMap.put("/assets/**", "anon");
// 配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
filterChainDefinitionMap.put("/doLogout", "logout");
// 剩余请求需要身份认证
filterChainDefinitionMap.put("/**", "authc");
// 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
shiroFilterFactoryBean.setLoginUrl("/staff/login");
// 未授权界面;
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
}
上例中,用到了两种,下面一一讨论:
- 第一种“anon”为匿名可访问,配置后,当前设置的请求则不再拦截任何人可以访问。
- 第二种“authc”为登录(认证)后可访问,配置后,当前请求会被拦截,验证当前请求者为登陆成功状态才会放行(可访问)。
下面两种上例未使用到,但项目中作用更广:
- 第三种“roles[admin]”为指定角色可以访问,配置后,当前请求会被拦截,只为拥有指定角色的用户放行。
- 第四种“perms[user:add:*]”为指定全蝎可以访问,配置后,当前请求会被拦截,只为拥有指定权限的用户放行。
Controller注解式权限控制
不同权限限制访问不同Controller
加注解@RequiresPermissions(“user”)