shiro的简单使用

//自定义验证器
public class UserRealm extends AuthorizingRealm {
	@Autowired
	private UserServiceImpl userServiceImpl;
	
	@Autowired
	private PowerServiceImpl powerServiceImpl;
	@Autowired
	private RoleServiceImpl roleServiceImpl;
	//授权
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		//1.获得登录用户
		User user = (User)principals.getPrimaryPrincipal();
		//2.工具用户id得到用户权限码
		Set<String> code = powerServiceImpl.getUserPermissionCode(user.getUserId());
		SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
		//根据用户id查找所有的rooles
		Set<String> role = roleServiceImpl.findRoleNameByUserId(user);
		simpleAuthorizationInfo.setRoles(role);//角色
		simpleAuthorizationInfo.setStringPermissions(code);//权限码
		return simpleAuthorizationInfo;
	}
	//登记认证
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
		System.out.println("认证方法..");
		//得到传进来的用户名
		String username =(String) token.getPrincipal();
		//String password="fromDB";
		User user2 = new User();
		user2.setUserName(username);
		User user = userServiceImpl.findByUserName(user2);
		
		String password=user.getUserPassword();
		Object principal=token.getPrincipal();
		Object credentials=password;
		String realmName=getName();//UserRealm代理类的名字com.test.shiro.UserRealm_0,可能是线程名
		ByteSource salt = ByteSource.Util.bytes(username);
		
		//由shiro完成验证
		SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, credentials, salt, getName());//
		//返回登记信息
		return info;
	}
	public static void main(String[] args) {
		ByteSource salt = ByteSource.Util.bytes("admin");
		SimpleHash simpleHash = new SimpleHash("MD5", "1234567890", salt, 1024);
		System.out.println(simpleHash);
	}
	public void claerCache(){
		super.clearCache(SecurityUtils.getSubject().getPrincipals());
	}
}

controller使用

@RequestMapping("/login.do")
	public String login(String username,String password,ModelMap map){
		System.out.println("username="+username+",password="+password);
		//1.获取subject
		Subject subject = SecurityUtils.getSubject();
		//2.判断是否登录
		if(!subject.isAuthenticated()){
			UsernamePasswordToken token = new UsernamePasswordToken(username, password);
			try {
				subject.login(token);
			} catch (AuthenticationException e) {
				logger.error("登录失败");
				return "redirect:application/common/login.jsp";
			}
		}
		User user = (User)SecurityUtils.getSubject().getPrincipal();//
		List<Menu> menuList = menuServiceImpl.getMenusListByUserId(user.getUserId());
		HashMap<String, Object> parentMenuMap = new HashMap<String,Object>();
		for (Menu menu : menuList) {
			parentMenuMap.put(String.valueOf(menu.getMenuParentId()), menu.getMenuName());
		}
		map.put("menuList", menuList);
		map.put("parentMenuMap", parentMenuMap);
		return "index";
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架,而Shiro是一个用于身份验证、授权和会话管理的强大的 Java 安全框架。在Vue.js中使用Shiro可以提供安全性和权限控制方面的支持。下面是一个使用Vue.js和Shiro的基本示例: 1. 配置Shiro后端 首先,需要在后端配置Shiro,包括身份验证和授权规则。这可以在Java的后端应用程序中完成,例如使用Spring Boot和Shiro的结合。 2. 创建登录页面 在Vue.js中,可以创建一个登录页面,用于用户输入用户名和密码。可以使用Vue组件来构建这个页面,并通过Vue的双向数据绑定来获取用户输入的用户名和密码。 3. 发起登录请求 在Vue组件中,可以使用axios等工具库来发起登录请求。将用户输入的用户名和密码发送到后端进行验证。如果验证成功,后端可以生成并返回一个令牌(token)给前端。 4. 保存令牌 在前端接收到令牌后,可以将其保存在本地存储中,例如localStorage或sessionStorage。这样,在后续的请求中,可以将令牌添加到请求头中,以便后端进行身份验证。 5. 创建权限控制组件 在Vue.js中,可以创建一个权限控制组件,用于控制不同页面或操作的访问权限。该组件可以通过检查本地存储中的令牌和后端进行通信,来确定当前用户是否有权限执行某个操作或访问某个页面。 需要注意的是,以上只是一个简单的示例,实际上,使用Vue.js和Shiro进行身份验证和授权会涉及到更多的细节和安全性考虑。具体实现方式还需要根据具体的项目需求和后端框架来进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值