shiro 详解

 

shiro笔记


梦想只要能持久,就能成为现实。我们不就是生活在梦想中的吗?

——丁尼生



最近研究了一下 shiro   分享一下我对shiro 的理解.


Apache shiro 是一个 java 的安全的框架  相当简单 不仅可以用在 java SE 也可以用在 java EE

接下来我们分别从外部和内部来看看Shiro的架构,对于一个好的框架,从外部来看应该具有非常简单易于使用的API,且API契约明确;从内部来看的话,其应该有一

个可扩展的架构,即非常容易插入用户自定义实现,因为任何框架都不能满足所有需求.而shiro就做到了这一点

优点:简单(相对于Spring Security)、可以在javaSE、JavaEE开发,帮助我们完成:认证、 授权、加密、会话管理、web集成、缓存等。


核心 : 

Authentication: 身份认证/*登录, 验证用户是否拥有相应的身份.

Authorization: 授权,权限认证,验证某个以认证用户是否拥有某个权限.

Session Manager:会话管理,用户登录就是一次会话,退出之前所有信息都将存入.

Cryptography:加密,保护数据的安全性(例如:密码加密存储到数据库,而不是明文存储)

我们 就先说一下核心功能  通过以上了解我们就能看出 shiro 其实就是将 认证、 授权、加密、会话管理、web集成、缓存单独做成的但是

记住一点,Shiro不会去维护用户、维护权限;这些需要我们自己去设计/提供;然后通过相应的接口注入给Shiro即可。


以上是一些见解 下面我们用代码展示一下 shiro 的具体实现

用户表  t_user

user_id

user_name

user_password

role_id 


角色表 t_role

role_id

role_name


权限表 t_permission

permission_id

permission_name

role_id

好 我们就用这个简单的结构来说一下shiro

既然它是一个框架 就有框架的通性那就是配置文件下面来说一下它的配置

pom.xml配置

下面是web.xml  中的 shiro过滤器  以及周期


至于bean  什么的就自己搞一下吧 这里就不和大家发表了


下面大家可以看一下 mapper.xml 给大家参考一下 


自定义realm类


为了方便大家使用这个reaml 我就不放图片了

package realm;


import javax.annotation.Resource;


import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;


import com.cn.dto.User;
import com.cn.service.LoginService;


public class MyRealm extends AuthorizingRealm {


@Resource
private LoginService service;
/**
* 为当前登录的Subject进行授权
* */
@Override
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollection principals) {
// TODO Auto-generated method stub
//从当前登录的Subject中取到用户名
String username=(String) principals.getPrimaryPrincipal();

SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
//通过用户名查到当前用户的角色信息放到simpleAuthorizationInfo对象中
simpleAuthorizationInfo.setRoles(service.getbyroles(username));
//通过用户名查到当前用户的权限信息放到simpleAuthorizationInfo对象中 
simpleAuthorizationInfo.setStringPermissions(service.getbypermission(username));
return simpleAuthorizationInfo;
}

/**
* 认证当前登录用户

*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
// TODO Auto-generated method stub

//从token中取到用户名
String username =(String) token.getPrincipal();
//通过用户名查询用户信息
User user=service.getbyname(username);
if(user!=null){
//当user不为空时将user中的信息封装成AuthenticationInfo对象
AuthenticationInfo aut = new SimpleAuthenticationInfo(user.getUserName(), user.getPassword(),"");
return aut;
}else{
return null;
}

}


}

下面spring.xml 中 的

shiro 的核心配置接口以及一些跳转配置


好了 以上便是shiro 的所需的以下配置 中 所需要注意的地方 希望能够为大家带来帮助

另外这是一个加密工具类 大家可以借鉴一下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值