错误报错:
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了