一、创建一个maven
导入shiro-all.Jar包
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-all</artifactId> <version>1.3.2</version> </dependency>
二、创建一个类Quickstart(快速入门)
package com.demo; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.*; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.Factory; /** * Shiro快速入门 */ public class Quickstart { public static void main(String[] args) { //读取文件,当然这是一个demo,在实际开发中并不需要这么写 Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); //通过反射创建对象 SecurityManager securityManager = factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); //获取当前的Subject(用户) Subject subject = SecurityUtils.getSubject(); //获取Session:调用subject.getSession() Session session = subject.getSession(); //给这个Session中放了用户 session.setAttribute("user", "pass"); //在取出来进行判断 String val = (String) session.getAttribute("user"); if (val.equals(session.getAttribute("user"))) { System.out.println("------>" + val); } //认证: 判断这个用户是否已经登录 //调用subject的isAuthenticated方法 if (!subject.isAuthenticated()) { //将你的用户名和密码放进token Token的作用:为了避开同源策略,防止CSRF(跨站请求伪造)攻击,可以在多个服务间共享,前端可以在每次请求的时候带上 Token 证明自己的合法地位 UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123456"); //是否记住我 token.setRememberMe(true); try { //执行登录 subject.login(token); //未知的账号异常 } catch (UnknownAccountException e) { System.out.println("没有这个用户" + token.getPrincipal()); //不正确的凭证异常 } catch (IncorrectCredentialsException e) { System.out.println("密码不正确" + token.getPrincipal()); //账号被锁定异常 } catch (LockedAccountException e) { System.out.println("用户被冻结" + token.getPrincipal()); //所有上面异常的父类 // 认证失败需要抛出的异常 } catch (AuthenticationException e) { } } //代表认证成功 System.out.println("--------------->" + subject.getPrincipal() + ":login is Success"); //判断是否有角色 if (subject.hasRole("role1")) { System.out.println("---------->You has"); } else { System.out.println("You Not Has"); } //判断当前这个用户有没有这个权限 if(subject.isPermitted("user:create")){ System.out.println("---------->You has"); }else { System.out.println("You Not Has"); } //登出 System.out.println("----->"+subject.isAuthenticated()); subject.logout(); System.out.println("----->"+subject.isAuthenticated()); } }
三、在resources包下创建一个shiro.ini文件
#提供了对用户/密码及其角色的配置 [users] #用户zhang的密码是123,此用户具有role1角色 zhang=123456,role1 #提供了角色及权限之间关系的配置,角色=user:create [roles] #角色role1对资源user拥有create、update权限 role1=user:create