shiro

基本概念
认证

登陆,身份认证,系统校验一个用户是不是合法用户的过程
最常用的简单身份认证是系统通过核对用户输入的用户名和密码,看其是否与系统中存储的该用户的用户名和密码是否一致,来反4判断用户身份是否正确

相关的概念
subject主体

shiro中最重要的概念就是subject(主体)。subject是一个虚拟的用户对象(封装了用户和登陆相关的属性和方法) login(),loginOut(),getSession()等

认证的流程

controller接收到用户输入的账号密码,封装到subject中,调用subject自己的登陆方法,完成登陆校验(自动查询数据库)

  1. 导入相关的依赖
  2. 自定义realm
  3. 自动装配一个安全管理器
    1. DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
    2. // 设置realm
    3. defaultSecurityManager.setRealm(authenRealm);
    4. return defaultSecurityManager;
  4. 通过@Configuration注解来配置过滤器工厂
    1. 设置过滤器规则放入map中
    2. 调用shiroFilterFactoryBean的setFilterChainDefinitionMap(map)把拦截的规则放入
    3. 设置一个安全管理器

案例:
package com.baizhi.config;

import com.baizhi.realm.AuthenRealm;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class ShiroConfig {

/**
 * 配置过滤器工厂
 */
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(SecurityManager securityManager){
    ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

// 设置过滤器的规则
// 配置拦截规则 哪些页面拦截 哪些不拦截 过滤器链
Map map = new HashMap();
/**
* anon 代表匿名可访问 就是不用登录就可以访问
*
* authc 代表登录后才能访问
*
* 支持通配符*
*
* 注意拦截规则 一个一个配置
/
map.put("/login.jsp",“anon”);
map.put("/login/
",“anon”);

    map.put("/main.jsp", "authc");
    map.put("/guru/*", "authc");
    map.put("/menu/*", "authc");
    map.put("/jsp/*", "authc");

    shiroFilterFactoryBean.setFilterChainDefinitionMap(map);

// 设置一个安全管理器
shiroFilterFactoryBean.setSecurityManager(securityManager);
return shiroFilterFactoryBean;
}

/**
 * 创建安全管理器
 *
 * @Bean 方法的形参  如果对应的类型的对象在工厂中有  会自动装配上
 * @return
 */
@Bean
public SecurityManager getSecurityManager(AuthenRealm authenRealm){
    DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();

// 设置realm
defaultSecurityManager.setRealm(authenRealm);
return defaultSecurityManager;
}

/**
 * 创建Realm
 * @return
 */
@Bean
public AuthenRealm getRealm(){
    return new AuthenRealm();
}

}

认证方法:
1. 把凭证信息,和身份信息封装到token中
2. 获取到subject主体
3. 调用该login()方法,把token放进去进行认证

案例:
@RequestMapping(“loginAdmin”)
public String loginAdmin(String username,String password){
// 1.数据封装token
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
// 2.获取Subject
Subject subject = SecurityUtils.getSubject();
// 3.调用登录方法
try {
subject.login(token);
return “redirect:/main.jsp”;
}catch (Exception e){
return “redirect:/login.jsp”;
}
}

授权的多种方式

标签式授权
引入标签库<%@taglib prefix=“shiro” uri=“http://shiro.apache.org/tags” %>
通过标签做标签式授权
在这里插入图片描述
注解式授权
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值