在web开发中,安全第一位!过滤器,拦截器~
开发网站,安全应该在什么时候考虑?
- 漏洞,隐私泄漏~
- 架构一旦确定~
shiro、SpringSecurity,这两个很像,除了类不一样,名字不一样;
认证,授权(每个用户都有哪些权限) - 功能权限
- 访问权限
- 菜单权限
- …拦截器,过滤器:大量的原生代码~冗余
AOP:横切~配置类
1、Spring Security
简介
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
- WebSecurityConfigurerAdapter:自定义Security策略
- AuthenticationManagerBuilder:自定义认证策略
- @EnableWebSecurity:开启WebSecurity模式,@Enablexxxxx开启某个功能
Spring Security的两个主要目标是“认证”和“授权”(访问控制)
“认证”(Authentication)
“授权”(Authorization)
这个概念是互通的,而不是只在Spring Security中存在
参考官网:Spring-Security找到对应的帮助文档
2、Shiro简介
2.1、什么是Shiro?
- Apache Shiro是一个Java的安全(权限)框架。
- Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。
- Shiro可以完成认证,授权,加密,会话管理,Web集成,缓存等。
- 下载地址:Shiro官网
Shiro
- 导入依赖
- 配置文件
自定义Realm继承AuthorizingRealm、重写doGetAuthorizationInfo方法
过滤
允许用户访问自己有权限的资源
/*
anon:无需认证就可以访问
authc:必须认证了才能访问
user:必须拥有 记住我 功能才能用
perms:拥有对某个资源的权限才能访问
role:拥有某个角色权限才能访问
*/
Map<String,String> filterMap = new LinkedHashMap<>();
filterMap.put("/user/add","authc");
bean.setFilterChainDefinitionMap(filterMap);
- HelloWord
Spring Secutiry-都有
//获得 当前用户
Subject currentUser = securityUtils.getSubject();
//用户获得session
Session session = currentUser.getSession();
//判断用户是否被认证
currentUser.isAuthenticated()
//判断用户是否拥有这个角色
currentUser.hasRole()
//粗粒度
currentUser.isPermitted()
//注销
currentUser.logout();
401 未授权