1、环境搭建
1、新建一个springboot项目,勾选Spring Web和Thymeleaf依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
2、测试环境是否正常
- 新建一个controller页面
@Controller public class MyController { @RequestMapping({"/","/index"}) public String toIndex(Model model){ model.addAttribute("msg","hello,Shiro!"); return "index"; } @RequestMapping("/user/add") public String add(){ return "user/add"; } @RequestMapping("/user/update") public String update(){ return "user/update"; } }
- 新建一个index.html页面
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>首页</h1> <p th:text="${msg}"></p> <hr> <a th:href="@{/user/add}">add</a> | <a th:href="@{/user/update}">update</a> </body> </html>
- 新建一个add.html页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>add</h1> </body> </html>
- 新建一个update.html页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>update</h1> </body> </html>
运行截图
2、Shiro实现登录拦截
- 在ShiroConfig中的getShiroFilterFactoryBean方法中添加如下配置:
//添加shiro的内置过滤器 /* * anon: 无需认证,就可以访问 * authc: 必须认证了,才能访问 * user: 必须拥有‘记住我’功能,才能访问 * perms: 拥有对某个资源的权限,才能访问 * role: 拥有某个角色权限,才能访问 * */ Map<String, String> filterMap = new LinkedHashMap<>(); filterMap.put("/user/add","authc"); filterMap.put("/user/update","authc"); bean.setFilterChainDefinitionMap(filterMap);
- 再点击首页的add或者update之后,
这是拦截之后的系统默认页面,我们要把这个页面显示一些内容 - 添加拦截成功页面
- 登录页面login.html
- 拦截成功页面
3、Shiro实现用户认证
- 在MyController中编写用户提交表单之后处理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <h1>登录</h1> <hr> <form action=""> <p>用户名:<input type="text" name="username"></p> <p>密码:<input type="text" name="password"></p> <p>密码:<input type="submit"></p> </form> </body> </html>