声明:这个只是一个demo练习,但是也有代码可以在实际开发中使用,下节说Shiro集成Spring
一、创建一个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
评论区