package cn.dreampie.common.utils; import cn.dreampie.common.config.AppConstants; import cn.dreampie.common.utils.security.EncriptionUtils; import cn.dreampie.function.user.User; import org.apache.commons.lang3.ArrayUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.session.Session; import org.apache.shiro.session.UnknownSessionException; import org.apache.shiro.subject.Subject; /** * Created by wangrenhui on 14-4-24. */ public class SubjectUtils { private static SubjectUtils subjectUtils = new SubjectUtils(); private static String[] baseRole = new String[]{"R_ADMIN", "R_MANAGER", "R_MEMBER", "R_USER"}; private SubjectUtils() { } public static SubjectUtils me() { return subjectUtils; } public Subject getSubject() { return SecurityUtils.getSubject(); } public Session getSession() { Subject subject = SecurityUtils.getSubject(); Session session = subject.getSession(); if (session == null) { throw new UnknownSessionException("Unable found required Session"); } else { return session; } } public User getUser() { Session session = getSession(); Object user = session.getAttribute(AppConstants.CURRENT_USER); if (ValidateUtils.me().isNullOrEmpty(user)) return null; else return (User) user; } public boolean login(String username, String password) { return login(username, password, false); } public boolean login(String username, String password, boolean rememberMe) { UsernamePasswordToken token = new UsernamePasswordToken(username, password); try { token.setRememberMe(rememberMe); SecurityUtils.getSubject().login(token); Session session = getSession(); session.setAttribute(AppConstants.CURRENT_USER, User.dao.findBy("username=?", username)); return true; } catch (AuthenticationException e) { return false; } } public boolean doCaptcha(String captchaToken) { Session session = getSession(); if (session.getAttribute(AppConstants.CAPTCHA_NAME) != null) { String captcha = session.getAttribute(AppConstants.CAPTCHA_NAME).toString(); if (captchaToken != null && captcha.equalsIgnoreCase(EncriptionUtils.encrypt(captchaToken))) { return true; } } return false; } public boolean wasLogin() { Subject subject = getSubject(); if (subject != null && subject.getPrincipal() != null && subject.isAuthenticated()) { return true; } return false; } public boolean wasBaseRole(String roleValue) { if (ArrayUtils.contains(baseRole, roleValue)) { return true; } return false; } }