Java tutorial
/** * Copyright (c) 2015-2017, Chill Zhuang (smallchill@163.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cn.com.xl.core.shiro; import java.util.Random; import org.apache.shiro.SecurityUtils; import org.apache.shiro.crypto.hash.Md5Hash; import org.apache.shiro.crypto.hash.SimpleHash; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ByteSource; import cn.com.xl.common.vo.ShiroUser; /** * shiro * * @author dafei, Chill Zhuang */ public class ShiroKit { private static final String NAMES_DELIMETER = ","; /** * ? */ final static String hashAlgorithmName = "MD5"; /** * */ final static int hashIterations = 1024; /** * shiro? * * @param ? * @param ?? * @return */ public static String md5(String credentials, String saltSource) { ByteSource salt = new Md5Hash(saltSource); return new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations).toString(); } /** * ??? * @param length * @return */ public static String getRandomSalt(int length) { String base = "abcdefghijklmnopqrstuvwxyz0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } return sb.toString(); } /** * ?? Subject * * @return Subject */ public static Subject getSubject() { return SecurityUtils.getSubject(); } /** * ?? ShiroUser * * @return ShiroUser */ public static ShiroUser getUser() { if (isGuest()) { return null; } else { return (ShiroUser) getSubject().getPrincipals().getPrimaryPrincipal(); } } /** * shiro?session * */ public static Session getSession() { return getSubject().getSession(); } /** * ?shirosessionKey * */ @SuppressWarnings("unchecked") public static <T> T getSessionAttr(String key) { Session session = getSession(); return session != null ? (T) session.getAttribute(key) : null; } /** * shirosessionKey * */ public static void setSessionAttr(String key, Object value) { Session session = getSession(); session.setAttribute(key, value); } /** * shirosessionKey */ public static void removeSessionAttr(String key) { Session session = getSession(); if (session != null) session.removeAttribute(key); } /** * ???,lacksRole ?? * * @param roleName * ?? * @return true?false */ public static boolean hasRole(String roleName) { return getSubject() != null && roleName != null && roleName.length() > 0 && getSubject().hasRole(roleName); } /** * hasRole???? * * @param roleName * ?? * @return ?true?false */ public static boolean lacksRole(String roleName) { return !hasRole(roleName); } /** * ???? * * @param roleNames * * @return :true,?false */ public static boolean hasAnyRoles(String roleNames) { boolean hasAnyRole = false; Subject subject = getSubject(); if (subject != null && roleNames != null && roleNames.length() > 0) { for (String role : roleNames.split(NAMES_DELIMETER)) { if (subject.hasRole(role.trim())) { hasAnyRole = true; break; } } } return hasAnyRole; } /** * ??? * * @param roleNames * * @return :true,?false */ public static boolean hasAllRoles(String roleNames) { boolean hasAllRole = true; Subject subject = getSubject(); if (subject != null && roleNames != null && roleNames.length() > 0) { for (String role : roleNames.split(NAMES_DELIMETER)) { if (!subject.hasRole(role.trim())) { hasAllRole = false; break; } } } return hasAllRole; } /** * ?????,lacksPermission ?? * * @param permission * ???? * @return ??true?false */ public static boolean hasPermission(String permission) { return getSubject() != null && permission != null && permission.length() > 0 && getSubject().isPermitted(permission); } /** * hasPermission?????? * * @param permission * ???? * @return ??true?false */ public static boolean lacksPermission(String permission) { return !hasPermission(permission); } /** * ????usernotAuthenticated?? * * @return ?true?false */ public static boolean isAuthenticated() { return getSubject() != null && getSubject().isAuthenticated(); } /** * ?authenticatedguest?? * * @return ?true?false */ public static boolean notAuthenticated() { return !isAuthenticated(); } /** * ??guset?? * * @return true? false */ public static boolean isUser() { return getSubject() != null && getSubject().getPrincipal() != null; } /** * ????????user?? * * @return true?false */ public static boolean isGuest() { return !isUser(); } /** * ????? * * @return ?? */ public static String principal() { if (getSubject() != null) { Object principal = getSubject().getPrincipal(); return principal.toString(); } return ""; } }