开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情
一.核心组件
- Subject:主体,代表当前“用户”。它是一个抽象概念,与当前应用交互的任何对象都是 Subject,如网络爬虫,机器人等。所有的Subject都绑定到 SecurityManager,即与Subject的所有交互都会委托给SecurityManager;可以把 Subject 认为是一个门面;SecurityManager 才是实际的执行者;
- SecurityManager:安全管理器,是 Shiro 框架的核心组件。它负责与其他组件进行交互,即所有与安全有关的操作都会由SecurityManager负责;
- Realm:域,可以把 Realm 看成 DataSource,即安全数据源。Shiro从Realm中获取安全数据(如用户、角色、权限)。当 SecurityManager 要验证用 身份时,需要从 Realm 中获取相应的用户,进行比较以确定用户身份是否合法;也需要从Realm中得到用户相应的角色/权限进行验证用户是否能进行操作。
二.UserController
@RestController
public class UserController {
@Autowired
UserService userService;
/**
* 使用shiro进行登录校验
* url:http://localhost/login
*/
@PostMapping("/login")
public String login(String username,String password){
System.out.println(username);
//1.获取当前的 Subject. 调用 SecurityUtils.getSubject();
Subject subject = SecurityUtils.getSubject();
//2.创建登录令牌,存储了用户名和密码,这个token是shiro创建的,也可以使用 jwt token
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
System.out.println("token:"+token);
//3.登录判断
try {
// 3.1调用shiro的login方法进行登录判断
subject.login(token);
//3.2 将用户名写入session
Session session = subject.getSession();
session.setAttribute("shiro:token", token);
return "登录成功";
} catch (Exception e) {
return "账号出错或密码出错";
}
}
}
@RestController
public class UserController {
@Autowired
UserService userService;
/**
* 使用shiro进行登录校验
* url:http://localhost/login
*/
@PostMapping("/login")
public String login(String username,String password){
System.out.println(username);
//1.获取当前的 Subject. 调用 SecurityUtils.getSubject();
Subject subject = SecurityUtils.getSubject();
//2.创建登录令牌,存储了用户名和密码,这个token是shiro创建的,也可以使用 jwt token
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
System.out.println("token:"+token);
//3.登录判断
try {
// 3.1调用shiro的login方法进行登录判断
subject.login(token);
//3.2 将用户名写入session
Session session = subject.getSession();
session.setAttribute("shiro:token", token);
return "登录成功";
} catch (Exception e) {
return "账号出错或密码出错";
}
}
}
三.引入依赖
在pom.xml文件里引入
<!-- shiro依赖 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.1</version>
</dependency>