com.github.dennisit.vplus.data.utils.ShiroUtils Maven / Gradle / Ivy
/*--------------------------------------------------------------------------
* Copyright (c) 2010-2020, Elon.su All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the elon developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Elon.su, you can also mail [email protected]
*--------------------------------------------------------------------------
*/
package com.github.dennisit.vplus.data.utils;
import com.github.dennisit.vplus.data.criteria.UniqCriteria;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.Permission;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import java.util.Collection;
import java.util.Optional;
/**
* shiro权限套件
* @author Elon.su
*/
public class ShiroUtils {
/**
* 检测用户是否被授权
* @return 授权与否
*/
public static boolean isAuthenticated() {
return Optional.ofNullable(SecurityUtils.getSubject()).map(x -> x.isAuthenticated()).orElse(false);
}
/**
* 获取客户端IP地址
* @return 客户端IP地址
*/
public static String getClientIp() {
return getSession().getHost();
}
/**
* 获取授权的用户信息
* @param 授权对象泛型约束
* @return 授权对象信息
*/
public static T getPrincipal(){
return (T)SecurityUtils.getSubject().getPrincipal();
}
/**
* 获取授权用户的唯一编号
* @param 授权对象编号
* @return 授权对象编号
*/
public static ID getPrincipalId(){
UniqCriteria principal = getPrincipal();
if(null != principal){
return (ID) principal.getUniqueId();
}
return null;
}
/**
* 获取会话对象
* @return session会话
*/
public static Session getSession() {
return Optional.ofNullable(SecurityUtils.getSubject()).map(x -> x.getSession(true)).orElse(null);
}
/**
* 保存映射到会话
* @param key 会话key
* @param value 会话值
*/
public static void setSessionAttibute(final String key, final Object value) {
Session session = getSession();
if (session != null) {
session.setAttribute(key, value);
}
}
/**
* 从会话中获取对象
* @param key 会话key
* @return 会话值
*/
public static Object getSessionAttibute(final String key) {
Object result = null;
Session session = getSession();
if (session != null) {
result = session.getAttribute(key);
}
return result;
}
/**
* 登出系统
*/
public static void logout() {
Subject subject = SecurityUtils.getSubject();
if (subject != null) {
subject.logout();
}
}
/**
* 检查用户是否Remembered
* @return 用户是否Remembered
*/
public static boolean isRemembered() {
return Optional.ofNullable(SecurityUtils.getSubject()).map(x -> x.isRemembered()).orElse(false);
}
/**
* 检查用户是有具有某个Permission
* @param permission 权限
* @return 是否有权限
*/
public static boolean isPermitted(final String permission) {
boolean flag = false;
Subject subject = SecurityUtils.getSubject();
if (subject != null) {
flag = subject.isPermitted(permission);
}
return flag;
}
/**
* 检查用户是有具有多个Permission
* @param permissions 权限
* @return 是否有权限
*/
public static boolean isPermittedAll(final Collection permissions) {
boolean flag = false;
Subject subject = SecurityUtils.getSubject();
if (subject != null) {
flag = subject.isPermittedAll(permissions);
}
return flag;
}
}