Shiro 入门demo
2020-03-30 16:03:42来源:博客园 阅读 ()
Shiro 入门demo
1、新建maven项目,引入shiro的核心依赖
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.5.1</version> </dependency>
2、在resource下新建shiro.ini
#定义用户 [users] #用户名=密码,角色。一个用户可以对应多个角色,比如同时是绿钻、黄钻,逗号分隔即可 chy1 = abcd, common chy2 = abcd, vip chy3 = abcd, svip
#定义角色 [roles] #角色=权限。可以有多个权限,逗号分隔 common = watch vip = watch,download svip = *
角色不能使用通配符*,但权限可以使用通配符*,表示该角色具有所有的权限,检测权限的时候能检测出来。
不能有相同的用户名,有相同的用户名时会自动用这些用户里的最后一个来判断。
比如先后配置2个用户chy=abcd,chy=1234,验证用户(chy,abcd)时,先列出所有用户名是chy的用户,取最后一个来比较(chy,1234),密码对不上,提示“用户名或密码错误”。
3、新建实体类User
public class User { private String name; private String password; public User() { } public User(String name, String password) { this.name = name; this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
4、新建工具列UserShiro
public class UserShiro { /** * 指定SecurityManager、Realm,将User包装为Subject * @param user 用户 * @return Subject shiro的认证、授权操作都要先将User包装为Subject,通过Subject来操作 */ public static Subject getSubject(User user) { //配置SecurityManager。IniSecurityManagerFactory过时了,使用DefaultSecurityManager代替 DefaultSecurityManager securityManager = new DefaultSecurityManager(); //.ini文件方式实现的Realm IniRealm realm = new IniRealm("classpath:shiro.ini"); securityManager.setRealm(realm); //指定要使用的SecurityManager SecurityUtils.setSecurityManager(securityManager); //获取Subject对象 Subject subject = SecurityUtils.getSubject(); return subject; } /** * 检查用户是否是指定角色,比如student、teacher、guest,common、vip、svip等 * @param user 用户 * @param role 角色 * @return boolean 该用户是否是指定的角色 */ public static boolean hasRole(User user, String role) { Subject subject = getSubject(user); return subject.hasRole(role); } /** * 获取用户对应的角色。比如百度网盘登录时在头像处要显示用户的身份标识 * @param user * @return String 用户对应的角色 */ public static String getRole(User user){ Subject subject = getSubject(user); String[] allRole = {"common", "vip", "svip"}; //如果用户同时具有多个角色,比如同时是绿钻、黄钻,可以放在数组、集合中返回 String role=null; for (String ele:allRole){ if (subject.hasRole(ele)){ role = ele; break; } } return role; } /** 检查用户是否具有某项权限、可以执行某项操作,比如下载文件、极速下载 * @param user 用户信息 * @param permit 要检查的权限 * @return boolean 该用户是否具有指定的权限 */ public static boolean isPermitted(User user, String permit) { Subject subject = getSubject(user); return subject.isPermitted(permit); } /** * 登录检查 * @param user 用户登录信息 * @return boolean 登录结果,是否匹配 */ public static boolean login(User user) { Subject subject= getSubject(user); //通token封装用户信息 UsernamePasswordToken token = new UsernamePasswordToken(user.getName(), user.getPassword()); try { //将token与Realm中的信息进行对比。这个方法的返回值是void,如果找不到匹配,直接抛出异常 subject.login(token); } catch (AuthenticationException e1) { //Realm中没有匹配的用户 return false; } return true; } /** * 登出 */ public static void logout(User user){ Subject subject = getSubject(user); subject.logout(); } }
5、新建测试类Test
public class Test { public static void main(String[] args) { User user = new User("chy3", "abcd"); if ( UserShiro.login(user) ){ System.out.println("登录成功"); System.out.println("您的身份是:" + UserShiro.getRole(user)); } else { System.out.println("用户名或密码错误"); } } }
6、运行,效果如下
登录成功
您的身份是:svip
原文链接:https://www.cnblogs.com/chy18883701161/p/12596297.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- logstash系列-入门整理 2020-06-10
- Java 入门教程 2020-06-09
- RocketMQ4.4 入门进阶+实战 2020-06-08
- 因为 MongoDB 没入门,我丢了一份实习工作 2020-06-07
- Java 从入门到精通-反射机制 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash