springboot整合shiro (二) 使用shiro过滤器实现认证资源拦截

简介: springboot整合shiro (二) 使用shiro过滤器实现认证资源拦截

我们去写几个页面来实现登录拦截

核心代码:

// 添加 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 这个请求

相关文章
|
21天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
1月前
|
Java Spring 容器
【二十二】springboot整合拦截器实战并对比过滤器
【二十二】springboot整合拦截器实战并对比过滤器
36 0
|
1月前
|
前端开发 JavaScript Java
springboot实现用户统一认证、管理(单点登录)
springboot实现用户统一认证、管理(单点登录)
48 0
|
2月前
|
缓存 安全 Java
Shiro框架以及Spring Boot整合Shiro
Shiro框架以及Spring Boot整合Shiro
Shiro框架以及Spring Boot整合Shiro
|
5天前
|
缓存 Java Sentinel
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
|
22天前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
|
1月前
|
前端开发 JavaScript Java
springboot+vue实现用户统一认证、管理-前端实现
springboot+vue实现用户统一认证、管理-前端实现
27 0
|
1月前
|
前端开发 JavaScript Java
springboot实现用户统一认证、管理-前端实现
springboot实现用户统一认证、管理-前端实现
14 0
|
1月前
|
前端开发 JavaScript Java
springboot实现用户统一认证、管理
springboot实现用户统一认证、管理
18 0
|
1月前
|
存储 前端开发 NoSQL
【二十一】springboot整合过滤器实战
【二十一】springboot整合过滤器实战
15 0