shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。spring中有spring security ,是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。 shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro,shiro就是一个安全认证框架
应用场景:
在独立应用中使用
在web中使用
在spring框架中集成。
shiro 解决应用安全的四要素:
认证 - 用户身份识别,常被称为用户“登录”
授权 - 访问控制
密码加密 - 保护或隐藏数据防止被偷窥
会话管理 - 与用户相关的时间敏感的数据
三个核心组件:Subject, SecurityManager 和 Realms.
Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
?Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作,Realm实质上是一个安全相关的dao
package com.apesource.shiro;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
public class MyRealm extends AuthorizingRealm {
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
}
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) {
}
}
如上继承后需要重写两个方法?doGetAuthenticationInfo 和?doGetAuthorizationInfo
doGetAuthenticationInfo
主要是用来进行鉴权的,参数authenticationToken登录构造的usernamepasswordtoken
doGetAuthorizationInfo
主要是用来做授权的,参数principalCollection:包含了所有已认证的安全数据
返回值:AuthorizationInfoInfo:授权数据
注:鉴权与授权是同时进行的,先进行鉴权再进行授权
@RequestMapping(value="/login")
public String login(User user) {
try {
//1.构造登录令牌
UsernamePasswordToken upToken = new UsernamePasswordToken(user.getUsername(),user.getPassword());
//2.获取subject
Subject subject = SecurityUtils.getSubject();
//3.调用subject进行登录
subject.login(upToken);
return "登录成功";
}catch (Exception e) {
return "用户名或密码错误";
}
}
@RequiresPermissions("user-home")
@RequestMapping(value = "/user/home")
public String home() {
return "访问个人主页成功";
}
以上就是shiro在java中的应用