Shiro教程--自定义Realm(五)

[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();

}

}

猜你喜欢

转载自blog.csdn.net/weixin_38964895/article/details/81099209