`
desfirefly
  • 浏览: 1059 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

shiro学习记录1-简单的登录认证

阅读更多

    测试通过,感觉初步学会通过shiro对用户登录进行认证。这里记录下测试遇见的问题及解决方法。

1. 入门程序(用户登录和退出)

1.1 创建maven工程

开发环境:MyEclipse

jdk版本:1.8

添加pom依赖如下:

 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
    </dependency>
    
    <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.2.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>
  </dependencies>

 

1.2 加入shiro-core的jar包及依赖包


 

1.3 log4j.properties日志配置文件

log4j.rootLogger=debug, 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

 

1.4 shiro.ini

在classpath创建shiro.ini文件,将用户名、密码配置在文件中。

[users]
zhangsan=123
lisi=123

 

1.5 认证登录退出代码testHelloworld()

    构建SecurityManager工厂,IniSecurityManagerFactory可以从ini文件中初始化SecurityManager环境。

再通过工厂创建securityManager,将其设置到运行环境中。再通过securitymanager创建一个subject实例。

    接下来创建token令牌,记录用户认证的身份和凭证(即用户名和密码)。

    subject与token里信息比对,验证是否通过。

    最后用户退出。

@Test
	public void testHelloworld(){
		Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
		 SecurityManager securityManager =factory.getInstance();
		 SecurityUtils.setSecurityManager(securityManager);
		 
		 Subject subject = SecurityUtils.getSubject();
		 UsernamePasswordToken token = new UsernamePasswordToken("zhangsan","123");
		 
		 try{
			 subject.login(token);
			 System.out.println("验证成功");
		 } catch (AuthenticationException e){
			 System.out.println("验证失败");
		 }
		 
		 Assert.assertEquals(true, subject.isAuthenticated());
		 
		 subject.logout();

 

1.6 测试结果

使用JUnit进行单元测试结果如下:

1. 验证通过:

2017-11-08 16:16:26,891 DEBUG [org.apache.shiro.io.ResourceUtils] - Opening resource from class path [shiro.ini] 
2017-11-08 16:16:26,896 DEBUG [org.apache.shiro.config.Ini] - Parsing [users] 
2017-11-08 16:16:26,897 DEBUG [org.apache.shiro.config.IniFactorySupport] - Creating instance from Ini [sections=users] 
2017-11-08 16:16:26,924 DEBUG [org.apache.shiro.realm.text.IniRealm] - Discovered the [users] section.  Processing... 
2017-11-08 16:16:26,931 DEBUG [org.apache.shiro.realm.AuthenticatingRealm] - Looked up AuthenticationInfo [zhangsan] from doGetAuthenticationInfo 
2017-11-08 16:16:26,931 DEBUG [org.apache.shiro.realm.AuthenticatingRealm] - AuthenticationInfo caching is disabled for info [zhangsan].  Submitted token: [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false]. 
2017-11-08 16:16:26,931 DEBUG [org.apache.shiro.authc.credential.SimpleCredentialsMatcher] - Performing credentials equality check for tokenCredentials of type [[C and accountCredentials of type [java.lang.String] 
2017-11-08 16:16:26,931 DEBUG [org.apache.shiro.authc.credential.SimpleCredentialsMatcher] - Both credentials arguments can be easily converted to byte arrays.  Performing array equals comparison 
2017-11-08 16:16:26,931 DEBUG [org.apache.shiro.authc.AbstractAuthenticator] - Authentication successful for token [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false].  Returned account [zhangsan] 
2017-11-08 16:16:26,932 DEBUG [org.apache.shiro.subject.support.DefaultSubjectContext] - No SecurityManager available in subject context map.  Falling back to SecurityUtils.getSecurityManager() lookup. 
2017-11-08 16:16:26,932 DEBUG [org.apache.shiro.subject.support.DefaultSubjectContext] - No SecurityManager available in subject context map.  Falling back to SecurityUtils.getSecurityManager() lookup. 
2017-11-08 16:16:26,932 DEBUG [org.apache.shiro.session.mgt.AbstractValidatingSessionManager] - No sessionValidationScheduler set.  Attempting to create default instance. 
2017-11-08 16:16:26,933 INFO [org.apache.shiro.session.mgt.AbstractValidatingSessionManager] - Enabling session validation scheduler... 
2017-11-08 16:16:26,937 DEBUG [org.apache.shiro.session.mgt.DefaultSessionManager] - Creating new EIS record for new session instance [org.apache.shiro.session.mgt.SimpleSession,id=null] 
验证成功
2017-11-08 16:16:27,005 DEBUG [org.apache.shiro.mgt.DefaultSecurityManager] - Logging out subject with primary principal zhangsan 
2017-11-08 16:16:27,005 DEBUG [org.apache.shiro.session.mgt.AbstractSessionManager] - Stopping session with id [a5706acf-e514-48cb-82de-51fe8bf85883] 

 

2. 用户名不存在:

2017-11-08 16:18:23,819 DEBUG [org.apache.shiro.io.ResourceUtils] - Opening resource from class path [shiro.ini] 
2017-11-08 16:18:23,824 DEBUG [org.apache.shiro.config.Ini] - Parsing [users] 
2017-11-08 16:18:23,826 DEBUG [org.apache.shiro.config.IniFactorySupport] - Creating instance from Ini [sections=users] 
2017-11-08 16:18:23,853 DEBUG [org.apache.shiro.realm.text.IniRealm] - Discovered the [users] section.  Processing... 
2017-11-08 16:18:23,864 DEBUG [org.apache.shiro.realm.AuthenticatingRealm] - Looked up AuthenticationInfo [null] from doGetAuthenticationInfo 
2017-11-08 16:18:23,864 DEBUG [org.apache.shiro.realm.AuthenticatingRealm] - No AuthenticationInfo found for submitted AuthenticationToken [org.apache.shiro.authc.UsernamePasswordToken - zhangsanihfd, rememberMe=false].  Returning null. 
验证失败

 

3. 密码错误:

2017-11-08 16:19:42,926 DEBUG [org.apache.shiro.io.ResourceUtils] - Opening resource from class path [shiro.ini] 
2017-11-08 16:19:42,930 DEBUG [org.apache.shiro.config.Ini] - Parsing [users] 
2017-11-08 16:19:42,931 DEBUG [org.apache.shiro.config.IniFactorySupport] - Creating instance from Ini [sections=users] 
2017-11-08 16:19:42,956 DEBUG [org.apache.shiro.realm.text.IniRealm] - Discovered the [users] section.  Processing... 
2017-11-08 16:19:42,963 DEBUG [org.apache.shiro.realm.AuthenticatingRealm] - Looked up AuthenticationInfo [zhangsan] from doGetAuthenticationInfo 
2017-11-08 16:19:42,963 DEBUG [org.apache.shiro.realm.AuthenticatingRealm] - AuthenticationInfo caching is disabled for info [zhangsan].  Submitted token: [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false]. 
2017-11-08 16:19:42,963 DEBUG [org.apache.shiro.authc.credential.SimpleCredentialsMatcher] - Performing credentials equality check for tokenCredentials of type [[C and accountCredentials of type [java.lang.String] 
2017-11-08 16:19:42,964 DEBUG [org.apache.shiro.authc.credential.SimpleCredentialsMatcher] - Both credentials arguments can be easily converted to byte arrays.  Performing array equals comparison 
验证失败

 

1.7 总结

    这里用户名、密码仅是通过配置文件写好,验证过程直接通过明文匹配,接下来实现通过Realm配置用户名、密码等信息,通过MD5生成散列信息匹配。

源代码:https://github.com/DesFirefly/shiro

 

  • 大小: 2.9 KB
分享到:
评论

相关推荐

    Shiro权限管理 的jar包 ,一些example ,shiro资料笔记与核心单词

    - **shiro资料笔记与核心单词**:用户的学习笔记,可能涵盖了关键概念和常用API,是学习Shiro的好帮手。 在实际应用中,Shiro可以通过简单的配置实现用户的登录、权限检查、会话管理等功能。通过 Realm,我们可以...

    apache-shiro 学习笔记

    在`shiro-demo`这个示例项目中,可能包含了一个简单的Shiro应用示例,包括配置文件、Controller、Service和DAO等组件,展示了如何使用Shiro进行认证和授权。开发者可以通过阅读这个示例来理解Shiro在实际项目中的...

    shiro学习笔记0.0.0.0

    尽管这份"shiro学习笔记0.0.0.0"可能内容不多,但通过它,你可以对 Shiro 有个初步的认识,为进一步深入学习打下基础。在实际项目中,根据需求选择合适的 Shiro 组件和配置,可以有效地提升应用的安全性。

    shiro课堂笔记

    学习 Shiro 的过程中,我们可以通过创建一个简单的项目,设置权限控制,实现用户登录、权限校验等功能,从而加深理解和掌握。 总之,Apache Shiro 提供了一套全面的安全管理解决方案,对于 Java 开发者来说,它是...

    吴天雄--shiro个人总结笔记.doc

    Shiro因其简单易用而受到青睐,相比于依赖Spring的Spring Security,Shiro的学习曲线更低。 Shiro的主要组成部分包括: 1. **Authentication**:身份认证,确认用户身份是否有效,通常涉及登录过程。 2. **...

    最全的安全框架shiro学习视频

    ### 安全框架Shiro详尽学习指南 #### 一、Shiro简介 Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理等功能,可以非常容易地开发出足够安全的应用。Shiro的目标是帮助开发者更...

    shiro所需jar包

    Apache Shiro是一个强大且易用的Java安全框架,主要用于实现身份认证、授权、会话管理和加密等功能。在Java应用程序中,Shiro可以帮助开发者处理与安全相关的任务,使得开发者可以更专注于业务逻辑,而不是复杂的...

    springcloud-shiro

    1. **Shiro配置**:配置Shiro的安全管理,包括定义 Realm(域)以获取用户信息,设置权限规则,以及登录、登出逻辑等。 2. **Spring Boot整合**:在Spring Boot的主配置类中,将Shiro与Spring Boot的生命周期进行...

    SpringBoot与Shiro整合-权限管理实战资料

    笔记和资料将详细记录整个学习过程,总结关键知识点和常见问题解决方案。 通过这门课程,你将掌握Spring Boot和Shiro整合的核心技术,能够构建出一套完整的用户权限管理系统,为你的Java应用提供坚实的安全保障。...

    权限管理shiro学习总结

    【权限管理框架Shiro学习总结】 在IT领域,权限管理是一个关键的安全机制,它确保了只有合法的用户才能访问特定的资源。Apache Shiro是一个强大且易用的Java安全框架,提供认证、授权、会话管理和加密等功能。下面...

    Apache Shiro教程

    - **身份验证流程**:Shiro通过Subject的`login()`方法发起登录请求,SecurityManager通过Realm验证凭证,成功后创建Session并记录Subject。 - **授权实现**:通过Role和Permission进行权限控制,可以定义角色并...

    Shiro整合Sping的源码

    1. **Apache Shiro**: - **核心概念**:Shiro 包含三个主要组件——认证、授权和会话管理。认证是确认用户身份,授权是决定用户可以访问哪些资源,会话管理则处理用户的会话状态。 - **简单易用**:Shiro 提供了...

    JFinal2.0整合shiro权限框架,简单好用

    - **配置Shiro**:创建Shiro的配置文件,如shiro.ini或shiro.xml,配置Realm(认证和授权信息的来源),定义安全策略,设置过滤器链等。 - **创建Realm**:自定义 Realm 类,继承 `AuthorizingRealm` 类,实现认证...

    shiro案例 demo

    1. **认证**:在Shiro中,认证是验证用户身份的过程。在案例中,我们看到用户名为`admin`,密码为`sojson`。Shiro提供了一个简单的认证流程,包括配置 Realm(域), Realm 会连接到我们的数据源(如数据库)并进行...

    Shiro入门.rar

    在这个"Shiro入门"压缩包中,包含了笔记和源码,是学习Shiro基础知识的好资源。 **一、Shiro基本概念** 1. **认证**:也称为身份验证,是确认用户身份的过程,通常通过用户名和密码进行验证。 2. **授权**:也称为...

    SpringBoot与Shiro整合-权限管理的简单权限系统.zip

    本项目“SpringBoot与Shiro整合-权限管理的简单权限系统”就是这样一个实例,它结合了现代Web开发框架SpringBoot和安全认证框架Apache Shiro,旨在构建一个简单的权限管理系统。这个系统能够实现用户登录、权限控制...

    learning-shiro:Shiro学习笔记

    1. **认证(Authentication)**:Shiro 提供了用户身份验证的机制,确保用户是他们声称的那个人。这通常涉及到用户提交凭证(如用户名和密码)给系统,然后 Shiro 通过比较这些凭证与存储在数据库或其他凭证存储中的...

    Java SSM整合shiro demo

    Java SSM整合Shiro是一个常见的企业级应用安全框架集成实践,它将Spring、Spring MVC和MyBatis这三大主流框架...通过这个Demo,开发者可以学习到如何将Shiro的特性有效地融入到SSM项目中,提升应用的安全性和用户体验。

    ssm+shiro+redis整合认证权限实现单点登陆仅供开发者参考使用.7z

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 4. **Apache Shiro**:Shiro是一个强大的Java安全框架,它提供了认证、...

    SSM整合Shiro.zip

    在SSM整合Shiro项目中,Shiro负责用户的登录验证、权限控制和Remember Me功能,为应用程序提供了简单而有效的安全解决方案。 5. **数据库SQL**:项目中的SQL文件用于创建和初始化数据库表,这些表通常包括用户信息...

Global site tag (gtag.js) - Google Analytics