安全控制框架Shiro的使用

Shiro依赖于SLFJ日志框架,而SLFJ只是一个接口,并没用提供具体的实现,可以选择Log4J作为它的实现,正好SLFJ也提供了一个slf4j-log4j12的Artifact,所以这里就可以用上了。

既然使用了Log4J,那么就应该在classpath下提供一个log4j.properties文件:

 

log4j.rootLogger=INFO,console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %c(%L) - %m%n

通过上面的配置将日志输出到控制台上,并配置了日志输出格式。

 

同样,既然使用了Shiro,那么就应该在classpath下提供一个shiro.ini文件:

 

[users]
shiro = 201314

我们配置了一个用户名为shiro,密码为201314(爱你一生一世)的用户。当然,这里仅仅为了演示,在实际项目中肯定不会把用户信息定义在配置文件中,除非这个项目的用户只有用户自己。
我们就用这个用户来见识一下Shiro的认证服务功能,下面写一个main方法试试:

 

 

package com.pifeng.shiro;

import org.apache.log4j.Logger;
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;

/**
 * 1.需要读取classpath下的shiro.ini配置文件,并通过工厂类创建SecurityManager对象,最终将其对象放入SecurityUtils中,供shiro框架随时获取。
 * 2.同样通过SecurityUtils类获取Subject对象,其实就是当前用户,只不过在shiro的世界里优雅地将其称为Subject(主体)。
 * 3.首先使用一个Username与Password来创建一个UsernamePasswordToken对象,然后通过这个Token对象调用Subject对象的login方法,让shiro进行用户身份认证。
 * 4.当登陆失败时,可以使用AuthenticationException来捕获这个异常;当登陆成功时,可以调用Subject对象的getPrincipal方法来获取Username,此时shiro已经创建一个Session。
 * 5.最后通过Subject对象的logout方法来注销本次Session。
 */
public class HelloShiro {

	private static final Logger LOGGER=Logger.getLogger(HelloShiro.class); 
	
	public static void main(String[] args) {
		//初始化SecurityManager
		Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro.ini");
		SecurityManager securityManager=factory.getInstance();
		SecurityUtils.setSecurityManager(securityManager);
		//获取当前用户
		Subject subject=SecurityUtils.getSubject();
		//登陆
		UsernamePasswordToken token=new UsernamePasswordToken("shiro", "201314");
		try {
			subject.login(token);
		} catch (AuthenticationException e) {
			LOGGER.info("登陆失败!");
			return;
		}
		LOGGER.info("登陆成功! Hello "+subject.getPrincipal());
		//注销
		subject.logout();
	}
}

运行结果如下:

 

 

SLF4J: This version of SLF4J requires log4j version 1.2.12 or later. See also http://www.slf4j.org/codes.html#log4j_version
INFO  org.apache.shiro.session.mgt.AbstractValidatingSessionManager(230) - Enabling session validation scheduler...
INFO  com.pifeng.shiro.HelloShiro(38) - 登陆成功! Hello shiro
EnumerateProviders catalog=0

EnumerateProviders totalPro=21

不难发现,SecurityManager才是Shiro的真正核心!

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

E%3Dmc%B2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值