Apache Shiro是一个常见而且易用的的Java安全框架,能够很方便的实现执行身份验证、受权、密码和会话管理等功能html
它有三个核心组件:Subject, SecurityManager 和 Realms
Subject:即“当前操做用户”。可是,在Shiro中,Subject这一律念并不单单指人,也能够是第三方进程、后台账户(Daemon Account)或其余相似事物。它仅仅意味着“当前跟软件交互的东西”。
Subject表明了当前用户的安全操做,SecurityManager则管理全部用户的安全操做。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro经过SecurityManager来管理内部组件实例,并经过它来提供安全管理的各类服务。
Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“链接器”。也就是说,当对用户执行认证(登陆)和受权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
UserRealm: 实现鉴权(登陆验证) | 受权管理(检查用户是否有权限访问)
SecurityManager: 权限总管
Subject: 受权对象
ShiroConfig: 决定给哪些地址设定权限spring
1.依赖导入json
shiro-spring
依赖2.实现自定义的UserRealm安全
继承自AuthorizingRealm
的Realm类3.实现登陆认证的业务逻辑框架
subject执行登陆代码(根据SecurityManager已分配的权限)
Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(username,password.toCharArray()); try { subject.login(token);// 执行登陆 } catch(Exception ex) { jsonData = new JsonData(1,ex.getMessage()); } if(subject.isAuthenticated()){// 为真则登陆成功 jsonData = new JsonData(0,"登陆成功"); }
@Configuration public class ShiroConfig { /** * Shiro权限过滤器的设置 * @param securityManager * @return */ @Bean("shiroFilter") public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") SecurityManager securityManager) { ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); bean.setSecurityManager(securityManager); bean.setLoginUrl("/sys/toLogin");// 设置登陆地址,鉴权失败时返回这个地址 // 权限的全局设置 Map<String,String> auths = new HashMap<String, String>(); auths.put("/sys/toLogin", "anon");// anon表示该地址无需权限访问 auths.put("/sys/doLogin", "anon"); auths.put("/**", "anon"); bean.setFilterChainDefinitionMap(auths); return bean; } /** * 给SecurityManager分配Realm * @return */ @Bean(name = "securityManager") public SecurityManager securityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(new MyUserRealm()); return securityManager; } }