`

Shiro身份认证

阅读更多
1. Subject认证主体

Subject认证主体包含两个信息:
Principals:身份,可以是用户名,邮件,手机号码等等,用来标识一个登录主体身份;
Credentials:凭证,常见有密码,数字证书等等;


2. 身份认证流程



3. Realm&JDBC Reaml

Realm:意思是域,Shiro从Realm中获取验证数据;
Realm有很多种类,例如常见的jdbc realm,jndi realm,text realm。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.andrew.shiro</groupId>
  <artifactId>Shiro02</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>Shiro02</name>
  <description>Shiro02 Project</description>
  
  <dependencies>
      <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.2.4</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.12</version>
    </dependency>
    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.37</version>
    </dependency>
  </dependencies>
</project>

src/main/resources/jdbc_realm.ini

[main]
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/shiro
dataSource.user=root
dataSource.password=root
jdbcRealm.dataSource=$dataSource
securityManager.realms=$jdbcRealm

src/main/resources/log4j.properties

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n
# General Apache libraries
log4j.logger.org.apache=WARN
# Spring
log4j.logger.org.springframework=WARN
# Default Shiro logging
log4j.logger.org.apache.shiro=TRACE
# Disable verbose logging
log4j.logger.org.apache.shiro.util.ThreadContext=WARN
log4j.logger.org.apache.shiro.cache.ehcache.EhCache=WARN

src/main/java/com/andew/shiro/JdbcRealmTest.java

package com.andrew.shiro;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
public class JdbcRealmTest {
    public static void main(String[] args) {
        // 读取配置文件,初始化SecurityManager工厂
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:jdbc_realm.ini");
        // 获取securityManager实例
        SecurityManager securityManager = factory.getInstance();
        // 把securityManager实例绑定到SecurityUtils
        SecurityUtils.setSecurityManager(securityManager);
        // 得到当前执行的用户
        Subject currentUser = SecurityUtils.getSubject();
        // 创建token令牌,用户名/密码
        UsernamePasswordToken token = new UsernamePasswordToken("andrew", "123456");
        try {
            // 身份认证
            currentUser.login(token);
            System.out.println("身份认证成功!");
        } catch (AuthenticationException e) {
            e.printStackTrace();
            System.out.println("身份认证失败!");
        }
        // 退出
        currentUser.logout();
    }
}

create table users (
    id int(11) null default null,
    username varchar(20) null default null,
    password varchar(20) null default null
)
collate='utf8_general_ci' engine=innodb;
insert into users values(1, 'andrew', '123456');

运行结果:
身份认证成功!
修改为:
UsernamePasswordToken token = new UsernamePasswordToken("andrew", "123");
运行结果:
org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - andrew, rememberMe=false] did not match the expected credentials.
...
身份认证失败!
  • 大小: 170.5 KB
分享到:
评论

相关推荐

    Apache Shiro身份验证绕过漏洞(CVE-2020-13933)

    直接使用java -jar srping....war命令运行即可 执行之后,访问http://主机的IP:8888/admin/*或者http://主机的IP:8888/login

    Apache Shiro 身份认证例子-源码

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了身份认证、授权、加密和会话管理功能,让开发人员可以轻松地在应用中处理安全性问题。本资源包含了一个 Apache Shiro 的身份认证例子的源码,这对于理解和...

    Shiro身份认证、授权的基本应用

    Shiro身份认证、授权的基本应用

    Shiro 身份验证、授权、密码和会话管理

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了身份验证、授权、密码管理和会话管理等功能,简化了在 Java 应用程序中处理安全性的问题。Shiro 的设计目标是使开发者能够专注于应用程序的安全逻辑,而...

    Apache Shiro 身份验证绕过漏洞安全风险通告

    Apache Shiro 身份验证绕过漏洞安全风险通告

    shiro身份验证、授权

    它涵盖了身份验证(Authentication)、授权(Authorization)、密码策略(Cryptography)以及会话管理(Session Management)等多个核心安全领域,使得开发者可以轻松地在Java应用中实现安全控制。 **身份验证...

    Apache Shiro 身份认证例子- Web应用

    可直接拷贝到Tomcat下运行,默认用户名/口令:admin/admin

    2 shiro身份认证.mp4

    身份验证介绍了身份验证基础、principals、credentials、身份认证流程、Realm、多 Realm 配置以及相关实战。

    Shiro学习第一式身份验证2

    Apache Shiro是一个强大...通过深入理解和实践Shiro的身份验证机制,特别是 Realm 和 JDBC Realm 的使用,我们可以有效地在Java应用中实现安全的用户认证功能。这不仅提高了代码的可维护性,还简化了安全相关的复杂性。

    shiro-core-1.7.0.jar

    近日,shiro被爆出Apache Shiro 身份验证绕过漏洞 (CVE-2020-11989),攻击者可以使用包含payload的恶意请求绕过Shiro的身份认证,漏洞于1.5.3修复。实际上,这个修复并不完全,由于shiro在处理url时与spring仍然存在...

    shiro-core 1.6.0版本 下载.rar

    近日,shiro被爆出Apache Shiro 身份验证绕过漏洞 (CVE-2020-11989),攻击者可以使用包含payload的恶意请求绕过Shiro的身份认证,漏洞于1.5.3修复。实际上,这个修复并不完全,由于shiro在处理url时与spring仍然存在...

    spring+shiro实现身份认证授权

    spring+shiro实现身份认证授权,拿过去就可以跑,bb+123456登陆,也可用PasswordHelper类自己改账号及密码 spring+shiro实现身份认证授权,拿过去就可以跑,bb+123456登陆,也可用PasswordHelper类自己改账号及密码

    shiro登陆身份认证和权限管理 密码加密

    1. **身份认证**:在 Shiro 中,身份认证是验证用户是否是他们声称的那个人的过程。Shiro 提供了 `Subject` 接口作为用户与框架交互的桥梁。当用户尝试登录时,通常会调用 `Subject.login()` 方法,传递包含用户名和...

    spring boot+shiro 权限认证管理案例

    Spring Boot 提供了简化 Java 应用程序开发的框架,而 Shiro 是一个轻量级的安全框架,专注于身份验证、授权、会话管理和加密。下面将详细阐述它们在权限认证管理中的应用及其相关知识点。 一、Spring Boot 概述 ...

    shiro 权限认证以及授权demo

    Shiro的认证过程涉及用户提交凭证(如用户名/密码)到系统,Shiro验证这些凭证并确定用户身份。在Shiro中,这通常通过`Subject`对象实现,它代表当前用户的安全操作主体。认证流程包括以下步骤: - 用户提交凭证 - `...

    shiro-auth-service.rar

    Springboot+Shiro+Redis前后端分离单点登录式权限管理系统,博客说明:https://blog.csdn.net/qq_36100599/article/details/121509780

    shiro实现授权登陆验证

    - 如果匹配成功,Realm返回一个身份验证信息对象(通常是一个PrincipalCollection),Shiro认为用户已认证。 2. **授权实现**: - 在Shiro中,权限是细粒度的,可以是角色(Role)或者权限(Permission)。 - 当...

    Shiro安全开源框架的介绍

    - Shiro身份认证的过程,包括如何使用不同的认证方式,以及如何理解Remembered和Authenticated标志的状态。 - Shiro授权的过程,授权要素和粒度的定义,编程授权,注解授权,以及理解授权流程和...

    Shiro安全验证框架

    Apache Shiro是一个强大且易用的Java安全框架,它提供了身份认证、授权、加密和会话管理功能,简化了在Java应用中实现安全控制层的复杂性。本资源包括一套深度解析Shiro的开发视频、源码以及相关文档,旨在帮助...

Global site tag (gtag.js) - Google Analytics