|
官方解释 :
Apache Shiro(日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。
Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API:
认证 - 用户身份识别,常被称为用户“登录”;
授权 - 访问控制;
密码加密 - 保护或隐藏数据防止被偷窥;
会话管理 - 每用户相关的时间敏感的状态。
Shiro还支持一些辅助特性,如Web应用安全、单元测试和多线程,它们的存在强化了上面提到的四个要素。
第一步:配置web.xml
shiroFilter
org.springframework.web.filter.DelegatingFilterProxy
targetFilterLifecycle
true
shiroFilter
/*
第二步:配置spring-shiro.xml
/mydemo/login=anon
/mydemo/getVerifyCodeImage=anon
/main**=authc
/user/info**=authc
第三步:自定义的Realm类
public class ShiroRealm extends AuthorizingRealm{
@Autowired
private UserInfoService userInfoService;
/**
* “授权”查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.
* @param principals
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection collection) {
SimpleAuthorizationInfo info = null;
/*String username = (String) collection.fromRealm(getName()).iterator().next();
/*User userInfo =userService.getById(username);
Criteria criteria=new Criteria();
criteria.put("userId", userInfo.getId());
if (userInfo != null) {
//权限控制
info = new SimpleAuthorizationInfo();
List moKuais=this.kuaiService.findListByUserId(criteria);
String method = null;
String permissioin = null;
for (MoKuai item : moKuais) {
permissioin = item.getPrivPermissioin();
if(!StringHelper.isNullOrEmpty(permissioin)){
permissioin = permissioin.trim();
info.addStringPermission(permissioin);
}
}
}*/
return info;
}
/**
* “认证”回调函数,登录时调用.
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken usernamePasswordToken=(UsernamePasswordToken) token;
UserInfo userInfo =userInfoService.getUserInfoByAccount(usernamePasswordToken.getUsername());
SimpleAuthenticationInfo info = null;
if (userInfo != null) {
//其他验证
info = new SimpleAuthenticationInfo(usernamePasswordToken.getUsername(), usernamePasswordToken.getPassword(), getName());
}
//身份认证验证成功,返回一个AuthenticationInfo实现;
return info;
}
/**
* 更新用户授权信息缓存.
*/
public void clearCachedAuthorizationInfo(String principal) {
SimplePrincipalCollection principals = new SimplePrincipalCollection(principal, getName());
clearCachedAuthorizationInfo(principals);
}
/**
* 清除所有用户授权信息缓存.
*/
public void clearAllCachedAuthorizationInfo() {
Cache cache = getAuthorizationCache();
if (cache != null) {
for (Object key : cache.keys()) {
cache.remove(key);
}
}
}
}
|
|
|