我们去写几个页面来实现登录拦截
核心代码:
// 添加 Shiro 内置过滤器 /** * Shiro 内置过滤器, 可以实现权限相关的拦截器 * 常用的过滤器: * anon: 无需认证(登录)即可访问 * authc: 必须认证才可访问 * user: 如果使用 rememberMe * perms: 该资源必须得到资源权限才能访问 * role: 该资源必须得到角色权限才可访问 */ Map<String, String> filterMap = new LinkedHashMap<>(); filterMap.put("/index", "anon"); filterMap.put("/login", "anon"); filterMap.put("/*", "authc"); filterFactoryBean.setFilterChainDefinitionMap(filterMap); // 修改调整的登陆页面 filterFactoryBean.setLoginUrl("/toLogin");
1. 登录和测试页面的撰写
首先引入 thymeleaf 依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
然后我们写几个页面
index中就是有两个链接可以跳转到add和update页面, 而login则是实现登录
controller中添加跳转
package com.krlin.springbootshiro.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ShiroController { @RequestMapping("/index") public String index() { return "index"; } @RequestMapping("/login") public String login() { return "login"; } @RequestMapping("/add") public String add() { return "user/add"; } @RequestMapping("/update") public String update() { return "user/update"; } @RequestMapping("/toLogin") public String toLogin() { return "/login"; } }
现在点击跳转是可以跳转到添加或者更新页面的, 这时候我们需要加权限,当点击添加的时候判断是否登录, 如果登录了就可以跳转,否则跳转到登陆页面
2. shiro实现登录拦截
我们在 ShiroConfig中做修改
/** * 创建 ShiroFilterFactoryBean */ @Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean (@Qualifier("securityManager") DefaultWebSecurityManager securityManager) { ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean(); // 设置安全管理器 filterFactoryBean.setSecurityManager(securityManager); // 添加 Shiro 内置过滤器 /** * Shiro 内置过滤器, 可以实现权限相关的拦截器 * 常用的过滤器: * anon: 无需认证(登录)即可访问 * authc: 必须认证才可访问 * user: 如果使用 rememberMe * perms: 该资源必须得到资源权限才能访问 * role: 该资源必须得到角色权限才可访问 */ Map<String, String> filterMap = new LinkedHashMap<>(); filterMap.put("/add", "authc"); filterMap.put("/update", "authc"); filterFactoryBean.setFilterChainDefinitionMap(filterMap); return filterFactoryBean; }
我们给 /add和/update 加上authc权限, 再次访问‘
可以看到,再次点击添加用户就会跳转到 login.jsp 但是因为login.jsp不存在, 所以是404
我们可以修改他跳转到指定页面,
// 修改调整的登陆页面 filterFactoryBean.setLoginUrl("/toLogin");
这个时候我们点击添加或者更新就会跳转到登陆页面
一般我们对一个网站做拦截处理的时候是对所有路径拦截,然后去放行某些登录注册等路径, 操作如下
我们去拦截所有的请求, 但是放行 /index 这个请求