Maven创建shiro 实例过程中出现SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

本文介绍了一个简单的Shiro安全机制的HelloWorld示例,并解决了因SLF4J日志配置不当导致的问题。通过调整Maven依赖范围,成功避免了日志框架的加载失败。

错误报错:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.


刚学shiro安全机制,迫不及待的敲了一个HelloWorld小Demo ,作用是对用户的用户名和密码进行认证。判断是否正确。

首先搭建环境,将shiro 用到的jar 和依赖的slf4j    jar 导入 。(直接将从maven库中的坐标拿来就使用了。结果。。)

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.nyist.zj</groupId>
  <artifactId>ShiroProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>ShiroProject</name>
  
  
  <dependencies>
  	<!-- shiro 核心jar包 -->
	  <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
	<dependency>
	    <groupId>org.apache.shiro</groupId>
	    <artifactId>shiro-core</artifactId>
	    <version>1.4.0</version>
	</dependency>
	 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
	
	<!-- shiro 的依赖slf4j -->
	
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-log4j12</artifactId>
	    <version>1.7.25</version>
	    <scope>test</scope>
	</dependency>
	  	<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-api</artifactId>
	    <version>1.7.25</version>
	</dependency>
	
	
	<!-- 日志依赖 -->
	
  	<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
	<dependency>
	    <groupId>commons-logging</groupId>
	    <artifactId>commons-logging</artifactId>
	    <version>1.2</version>
	</dependency>
	
  	
  </dependencies>
</project>



由于是小demo 所以没有使用到数据库,直接在resource 中穿你创建了一个shiro.ini 来存储用户信息

[users]
user=123
zhang=123

然后是我们伟大的HelloWorld

package com.nyist.zj.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 HelloWorld {
	/**
	 * shiro 安全机制实例:
	 * 文件中resource 中的shiro.ini 是配置文件,包含了两个的哟用户和密码
	 * 格式:[users]    user=pass
	 * 
	 * @param args
	 */
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		
		/*
		 * 加载配置文件,初始化SecurityManager  工厂
		 */
		Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");	
		//获取SecurityManager 实例
		SecurityManager securityManager = factory.getInstance();
		//把SecurityManager 实例绑定到SecurityUtils中
		SecurityUtils.setSecurityManager(securityManager);
		//得到当期执行的用户
		Subject currentUser = SecurityUtils.getSubject();
		//创建一个token 令牌,用户名/密码
		UsernamePasswordToken token = new UsernamePasswordToken("user", "123");
		
		//身份认证
		try{
		currentUser.login(token);
		System.out.println("用户名密码正确");
		}catch (AuthenticationException e) {
			// TODO: handle exception
		
			e.printStackTrace();
			System.out.println("用户名或密码错误");
		}
		//退出
		currentUser.logout();
	
	}
}

然后运行Java代码



虽然结果是正确的,但是出现上面的错误。居然说是没有不能依赖包。我明明将所有的依赖加上了。

上网查了下:pom.xml中的<scope>test</scope>这段代码搞的鬼。。

上面的代码说的是需要在测试环境下使用,而我直接在开发环境中使用了所以,我们需要将

<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-log4j12</artifactId>
	    <version>1.7.25</version>
	    <scope>test</scope>
	</dependency>
改为

<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-log4j12</artifactId>
	    <version>1.7.25</version>
	    
	</dependency>
这样就OK了





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值