Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335331
  • 博文数量: 297
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3065
  • 用 户 组: 普通用户
  • 注册时间: 2019-06-17 10:57
文章分类

全部博文(297)

文章存档

2022年(95)

2021年(201)

2019年(1)

我的朋友

分类: Java

2021-09-13 17:22:38

一、搭建一个SpringBoot 项目。

二、导入shiro 相关坐标:

点击(此处)折叠或打开

  1. <dependency>
  2.             <groupId>org.apache.shiro</groupId>
  3.             <artifactId>shiro-spring</artifactId>
  4.             <version>1.7.1</version>
  5.         </dependency>

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

实现抽象类AuthorizingRealm 中的方法:

点击(此处)折叠或打开

  1. package com.itmao.config;

  2. import org.apache.shiro.authc.AuthenticationException;
  3. import org.apache.shiro.authc.AuthenticationInfo;
  4. import org.apache.shiro.authc.AuthenticationToken;
  5. import org.apache.shiro.authz.AuthorizationInfo;
  6. import org.apache.shiro.realm.AuthorizingRealm;
  7. import org.apache.shiro.subject.PrincipalCollection;

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

  15.     @Override
  16.     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  17.         return null;
  18.     }
  19. }
编写配置类:

点击(此处)折叠或打开

  1. package com.itmao.config;

  2. import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
  3. import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
  4. import org.springframework.beans.factory.annotation.Qualifier;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;

  7. import java.util.LinkedHashMap;
  8. import java.util.Map;

  9. //from fhadmin.cn
  10. @Configuration
  11. public class ShiroConfig {

  12.     // ShiroFilterFactoryBean
  13.     @Bean
  14.     public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("getDefaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
  15.         ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

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

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

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

  34.     // DefaultWebSecurityManager
  35.     @Bean
  36.     public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("getUserRealm") UserRealm userRealm){
  37.         DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();

  38. // 关联UserRealm
  39.         defaultWebSecurityManager.setRealm(userRealm);
  40.         return defaultWebSecurityManager;
  41.     }

  42.     // 创建 realm 对象,需要自定义类
  43.     @Bean
  44.     public UserRealm getUserRealm() {
  45.         return new UserRealm();
  46.     }
  47. }
四、编写测试页面和页面跳转的Controller。


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

阅读(298) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~