[main] #声明变量jdbcRealm jdbcRealm=com.company.realm.MyRealm #应用jdbcRealm变量完成对securityManager的配置 securityManager.realms=$jdbcRealm |
package com.company.realm; import java.util.HashSet; import java.util.Set; /** * Created by Teacher XU on 2017/11/22 0022. */ public class UserService { public Set<String> getRoles(String username) { Set<String> roles = new HashSet<String>(); System.out.println(username+" has roles:"); roles.add("role1"); roles.add("role2"); roles.add("role3"); return roles; } public Set<String> getPermissions(String username) { Set<String> permissions = new HashSet<String>(); System.out.println(username+" has permissions:"); permissions.add("user.*"); permissions.add("teacher.findAll"); permissions.add("student.save"); permissions.add("student.update"); permissions.add("student.delete"); return permissions; } public User getByUsername(String username) { return new User(1001,username, "123456"); } } |
package com.company.realm; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; /** * Created by Teacher XU on 2017/11/22 0022. */ public class MyRealm extends AuthorizingRealm{ private UserService userService; public MyRealm() { this.userService = new UserService(); } /** * 为当前登录的用户赋予角色roles和权限permissions * @param principals * @return */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String username=(String)principals.getPrimaryPrincipal(); SimpleAuthorizationInfo authorizationInfo=new SimpleAuthorizationInfo(); authorizationInfo.setRoles(userService.getRoles(username)); authorizationInfo.setStringPermissions(userService.getPermissions(username)); return authorizationInfo; } /** * 验证当前登录的用户 AuthenticationInfo * @param token * @return * @throws AuthenticationException */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String username=(String)token.getPrincipal(); User user=userService.getByUsername(username); if(user!=null){ AuthenticationInfo authcInfo= new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(),getName()); return authcInfo; }else{ return null; } } } |
package com.company.shiro; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ShiroSelfRealm { //获取Logger日志对象 public static final Logger log = LoggerFactory.getLogger(ShiroSelfRealm.class); public static void main(String[] args) { //1-创建SecurityManager安全管理器对象,读取shiro配置文件信息 SecurityManager securityManager = new IniSecurityManagerFactory ("classpath:self_realm_shiro.ini").getInstance(); SecurityUtils.setSecurityManager(securityManager);//2-配置安全管理工具SecurityUtil Subject authenSubject = SecurityUtils.getSubject();//3-获得Subject对象 //4-获取Token令牌 AuthenticationToken successToken = new UsernamePasswordToken("scott", "123456");//成功 try { authenSubject.login(successToken); log.info("login success!"); } catch (Exception e) { e.printStackTrace(); log.error("login error!"); } authenSubject.logout(); } } |
Shiro教程--自定义Realm(五)
猜你喜欢
转载自blog.csdn.net/weixin_38964895/article/details/81099209
今日推荐
周排行