1、概念
(1)基本概念
用户登录成功之后,要进行响应的操作就需要有对应的权限;在进行操作之前对权限进行检查一授权
权限控制通常有两类做法:
- 不同身份的用户登录,我们现在不同的操作菜单(没有权限的菜单不现实)
- 对所有用户显示所有菜单,当用户点击菜单以后再验证当前用户是否有此权限,如果没有则提示权限不足
2、HTML授权
(1)定义添加页面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>aAdd</title> </head> <body> <h3>添加学生</h3> </body> </html>
(2)书写controller,访问添加页面:
@RequestMapping("/sAdd.html") public String sAdd(){ return "sAdd"; }
(3)正常登录获取权限:管理员登录
(4)非正常登录访问添加页面:直接访问
3、过滤器授权
(1)定义过滤器
@Bean//过滤器 public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultSecurityManager securityManager) { ShiroFilterFactoryBean filter = new ShiroFilterFactoryBean(); //过滤器是shiro执行权限的核心,进行认证和授权是需要SecurityManager的 filter.setSecurityManager(securityManager); //设置shiro的拦截规则 Map<String, String> filterMap = new HashMap<>(); //user:使用remberme的用户可访问 //perms:对应权限可访问 //role:对应的角色才能访问 filterMap.put("/", "anon");//anon表示不拦截(匿名用户可访问) filterMap.put("/login.html", "anon"); filterMap.put("/regist.html", "anon"); filterMap.put("/user/login", "anon"); filterMap.put("/user/regist", "anon"); filterMap.put("/static/**", "anon"); filterMap.put("/layui/**", "anon"); filterMap.put("/static/layui/css", "anon"); filterMap.put("/static/layui/js", "anon"); filterMap.put("/index.html", "anon"); filterMap.put("/test.html", "anon"); filterMap.put("/**", "authc");//authc表示认证用户可访问 filterMap.put("/s_aAdd.html", "perms[man_add]"); filter.setFilterChainDefinitionMap(filterMap); filter.setLoginUrl("/login.html"); //设置未授权访问的页面 filter.setUnauthorizedUrl("/login.html"); return filter; }
在以上代码中添加对s_aAdd.html的过滤,并添加权限
filterMap.put("/s_aAdd.html", "perms[man_add]");
如果直接访问s_aAdd.html下的添加页面,是不能访问成功的
4、注解方式
(1)在配置类中定义shiro对注解的支持
@Bean//配置注解支持 public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator(){ DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator=new DefaultAdvisorAutoProxyCreator(); defaultAdvisorAutoProxyCreator.setProxyTargetClass(true); return defaultAdvisorAutoProxyCreator; } @Bean//配置注解支持 public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor (DefaultWebSecurityManager defaultMebsecurityNlanager) { AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); advisor.setSecurityManager(defaultMebsecurityNlanager); return advisor; }
(2)在controller中定义注解
@RequiresPermissions("man_add") @RequestMapping("/sAdd.html") public String sAdd(){ return "sAdd"; }
(3)测试(不进行登录直接访问添加页面)
5、代码手动授权
代码的方式获取到用户的权限,如果用户拥有相应的权限就执行响应的操作,否则执行其他操作