Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional information regarding * copyright ownership. The ASF licenses this file to you 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.axiom.system.security; import java.io.Serializable; import javax.annotation.PostConstruct; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.DisabledAccountException; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.crypto.hash.Md5Hash; import org.apache.shiro.crypto.hash.SimpleHash; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.util.ByteSource; import org.apache.shiro.util.SimpleByteSource; import org.springframework.beans.factory.annotation.Autowired; import cn.com.axiom.system.entity.User; import cn.com.axiom.system.service.UserService; import com.google.common.base.Objects; public class ShiroDbRealm extends AuthorizingRealm { private UserService userService; // private SysLogService sysLogService; /** * ?,. */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; User user = userService.findUserByUserName(token.getUsername()); if (user != null) { if (user.getStatus() != 1) { throw new DisabledAccountException(); } // sysLogService.log("","",user.getUserName(), SysLog.INFO, // token.getHost(),SysLog.USER); SimpleByteSource salt = (SimpleByteSource) ByteSource.Util.bytes(user.getUserName()); String passwordMd5 = new Md5Hash(user.getPassword().getBytes(), salt).toString(); return new SimpleAuthenticationInfo(new ShiroUser(user.getId(), user.getUserName(), user.getRealName()), passwordMd5, ByteSource.Util.bytes(user.getUserName()), getName()); } else { return null; } } @PostConstruct public void initCredentialsMatcher() { HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(UserService.HASH_ALGORITHM); matcher.setHashIterations(1); setCredentialsMatcher(matcher); } /** * ?, ???. */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // ShiroUser shiroUser = (ShiroUser) principals.getPrimaryPrincipal(); // User user = userService.findUserByUserName(shiroUser.loginName); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); // Set<String> permissions = Sets.newHashSet(); // for (Role role : user.getRoles()) { // //Role??? // if (role!=null) { // info.addRole(role.getName()); // //Permission??? // for(Permission permission : role.getPermissions()){ // permissions.add(permission.getLink()); // } // info.addStringPermissions(permissions); // } // } return info; } /** * AuthenticationSubject??????. */ public static class ShiroUser implements Serializable { private static final long serialVersionUID = -1373760761780840081L; private Long id; private String loginName; private String name; public ShiroUser(Long id, String loginName, String name) { this.id = id; this.loginName = loginName; this.name = name; } public Long getId() { return id; } public String getLoginName() { return loginName; } public String getName() { return name; } /** * <shiro:principal/>. */ @Override public String toString() { return loginName; } /** * ?hashCode,?loginName; */ @Override public int hashCode() { return Objects.hashCode(loginName); } /** * ?equals,?loginName; */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ShiroUser other = (ShiroUser) obj; if (loginName == null) { if (other.loginName != null) return false; } else if (!loginName.equals(other.loginName)) return false; return true; } } @Autowired public void setUserService(UserService userService) { this.userService = userService; } // @Autowired // public void setSysLogService(SysLogService sysLogService) { // this.sysLogService = sysLogService; // } // }