后台-插件-广告管理-内容页广告位一(手机)

您现在的位置是:首页 > 编程语言 > PHP编程PHP编程

SpringBoot 整合 Shiro 实现登录拦截

2021-09-15 00:27:55PHP编程人已围观

简介一、搭建一个SpringBoot 项目。 二、导入shiro 相关坐标: <dependency> <groupId>org.apache.shiro</groupId&

一、搭建一个SpringBoot 项目。

二、导入shiro 相关坐标:

        <dependency>
            <groupId>org.apache.shirogroupId>
            <artifactId>shiro-springartifactId>
            <version>1.7.1version>
        dependency>

三、与启动类同目录创建config 包:

实现抽象类AuthorizingRealm 中的方法:

package com.itmao.config;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

//from fhadmin.cn
public class UserRealm extends AuthorizingRealm {
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        System.out.println("执行了doGetAuthorizationInfo方法");
        return null;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        return null;
    }
}

编写配置类:

package com.itmao.config;

import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.LinkedHashMap;
import java.util.Map;

//from  fhadmin.cn
@Configuration
public class ShiroConfig {

    // ShiroFilterFactoryBean
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("getDefaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

        // 设置安全管理器
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);

        // 设置shiro内置过滤器
        Map filterMap = new LinkedHashMap<>();
        /*
        map 中value 的意义
        * anon: 无需认证就可以访问资源;
        * authc:必须认证后才能访问资源;
        * user:必须拥有“记住我”功能才能访问资源;
        * perms:拥有对某个资源的权限才能访问资源;
        * role:拥有某个角色权限才能访问资源
        * **/
        filterMap.put("/user/*","authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);

        // 设置登录页面url
        shiroFilterFactoryBean.setLoginUrl("/toLogin");
        return shiroFilterFactoryBean;
    }

    // DefaultWebSecurityManager
    @Bean
    public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("getUserRealm") UserRealm userRealm){
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();

//        关联UserRealm
        defaultWebSecurityManager.setRealm(userRealm);
        return defaultWebSecurityManager;
    }

    // 创建 realm 对象,需要自定义类
    @Bean
    public UserRealm getUserRealm() {
        return  new UserRealm();
    }
}

四、编写测试页面和页面跳转的Controller。

上面设置user 目录下所有资源的访问均需认证后才可访问,未认证访问时,会自动跳转到登录页面,即表示登录拦截成功。

Tags:拦截 整合 登录 SpringBoot shiro 

很赞哦! ()

后台-插件-广告管理-内容页广告位二(手机)
后台-插件-广告管理-内容页广告位三(手机)
后台-插件-广告管理-内容页广告位四(手机)

文章评论

留言与评论(共有 0 条评论)
   
验证码:

本栏推荐

站点信息

  • 文章统计141546篇文章
  • 浏览统计17469次浏览
  • 评论统计1个评论
  • 标签管理标签云
  • 统计数据:统计代码
  • 微信公众号:扫描二维码,关注我们