shiro授权以及注解式开发(1)

System.out.println(“用户授权…”);

String username = principals.getPrimaryPrincipal().toString();

ShiroUser user = shiroUserService.queryByName(username);

Set roles = shiroUserService.getRolesByUserId(user.getUserid());

Set pers = shiroUserService.getPersByUserId(user.getUserid());

//        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

//        info.addRoles(roles);

//        info.addStringPermissions(pers);

SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();

info.setRoles(roles);

info.setStringPermissions(pers);

return info;

}

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

System.out.println(“身份认证…”);

String username = token.getPrincipal().toString();

String password = token.getCredentials().toString();

ShiroUser user = shiroUserService.queryByName(username);

//        拿到数据库中的用户信息,放入token凭证中,用于controler进行对比

AuthenticationInfo info = new SimpleAuthenticationInfo(

user.getUsername(),

user.getPassword(),

ByteSource.Util.bytes(user.getSalt()),

this.getName()

);

return info;

}

}

实现类

@Override

public Set getRolesByUserId(Integer userId) {

return shiroUserMapper.getRolesByUserId(userId);

}

@Override

public Set getPersByUserId(Integer userId) {

return shiroUserMapper.getPersByUserId(userId);

}

debug运行时进入断点,可看到roles为1(普通用户)

登录成功后进入页面

点击用户新增时会进入断点

然后出现以下界面

返回再次点击用户新增时,又会进入断点,说明shiro每次都会进入数据库,查看你是否有权限,说明shiro的安全性极高,但是由于每次请求都要访问数据库,所以性能不好,这里可以使用redis缓存

没有权限的原因是在applicationContext-shiro文件中配置的权限是这样的

而数据库中普通用户的id为1,所以应该将admin改为1

再次访问  就有权限了

二、注解式开发

=======

常用注解介绍

@RequiresAuthenthentication:表示当前Subject已经通过login进行身份验证;即 Subject.isAuthenticated()返回 true

@RequiresUser:表示当前Subject已经身份验证或者通过记住我登录的

@RequiresGuest:表示当前Subject没有身份验证或者通过记住我登录过,即是游客身份

@RequiresRoles(value = {“admin”,“user”},logical = Logical.AND):表示当前Subject需要角色admin和user

@RequiresPermissions(value = {“user:delete”,“user:b”},logical = Logical.OR):表示当前Subject需要权限user:delete或者user:b

建立AnnotationController类

**package com.ltf.controller;

import org.apache.shiro.authz.annotation.Logical;

import org.apache.shiro.authz.annotation.RequiresPermissions;

import org.apache.shiro.authz.annotation.RequiresRoles;

import org.apache.shiro.authz.annotation.RequiresUser;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

@Controller

public class AnnotationController {

//只有登录才能访问

@RequiresUser

@RequestMapping(“/passUser”)

public String passUser(HttpServletRequest request){

return “admin/addUser”;

}

//拥有roleid为1和4的角色才能访问

@RequiresRoles(value = {“1”,“4”},logical = Logical.AND)

@RequestMapping(“/passRole”)

public String passRole(HttpServletRequest request){

return “admin/listUser”;

}

//拥有修改和查看的权限才能访问

@RequiresPermissions(value = {“user:update”,“user:view”},logical = Logical.OR)

@RequestMapping(“/passPer”)

public String passPer(HttpServletRequest request){

return “admin/resetPwd”;

}

@RequestMapping(“/unauthorized”)

public String unauthorized(){

return “unauthorized”;

}

}**

@Controller注解是为了交给spring处理

AnnotationController 是直接处理浏览器的请求,也就说明了shiro要与springMVC配合使用

也就意味着要在springMVC中进行配置

<bean class=“org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator”

depends-on=“lifecycleBeanPostProcessor”>

unauthorized

测试代码

<%–

Created by IntelliJ IDEA.

User: 小宝的宝

Date: 2021/12/17

Time: 20:50

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

Title

hello springMVC

    shiro注解

    用户认证

    角色

    权限认证

    运行代码
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

    深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

    因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    img

    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

    如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)


    完整版面试题资料免费分享,只需你点赞支持,动动手指点击此处就可免费领取了

    前端实习面试的套路


    回顾项目

    往往在面试时,面试官根据你简历中的项目由点及面地展开问答,所以请对你做过的最好的项目进行回顾和反思。回顾你做过的工作和项目中最复杂的部分,反思你是如何完成这个最复杂的部分的。

    面试官会重点问你最复杂的部分的实现方法和如何优化。重点要思考如何优化,即使你项目中没有对那部分进行优化,你也应该预先思考有什么优化的方案。如果这部分答好了,会给面试官留下很不错的印象。

    重点在于基础知识

    这里指的基础知识包括:前端基础知识和学科基础知识。

    前端基础知识:html/css/js 的核心知识,其中 js 的核心知识尤为重要。比如执行上下文、变量对象/活动对象(VO/AO)、作用域链、this 指向、原型链等。

    学科基础知识:数据结构、计算机网络、算法等知识。你可能会想前端不需要算法,那你可能就错了,在大公司面试,面试官同样会看重学生这些学科基础知识。
    你可能发现了我没有提到React/Vue这些框架的知识,这里得说一说,大公司不会过度的关注这方面框架的知识,他们往往更加考察学生的基础。
    这里我的建议是,如果你至少使用或掌握其中一门框架,那是最好的,可以去刷刷相关框架的面试题,这样在面试过程中即使被问到了,也可以回答个 7788。如果你没有使用过框架,那也不需要太担心,把重点放在基础知识和学科基础知识之上,有其余精力的话可以去看看主流框架的核心思想。

    下很不错的印象。

    重点在于基础知识

    这里指的基础知识包括:前端基础知识和学科基础知识。

    前端基础知识:html/css/js 的核心知识,其中 js 的核心知识尤为重要。比如执行上下文、变量对象/活动对象(VO/AO)、作用域链、this 指向、原型链等。

    学科基础知识:数据结构、计算机网络、算法等知识。你可能会想前端不需要算法,那你可能就错了,在大公司面试,面试官同样会看重学生这些学科基础知识。
    你可能发现了我没有提到React/Vue这些框架的知识,这里得说一说,大公司不会过度的关注这方面框架的知识,他们往往更加考察学生的基础。
    这里我的建议是,如果你至少使用或掌握其中一门框架,那是最好的,可以去刷刷相关框架的面试题,这样在面试过程中即使被问到了,也可以回答个 7788。如果你没有使用过框架,那也不需要太担心,把重点放在基础知识和学科基础知识之上,有其余精力的话可以去看看主流框架的核心思想。

    • 7
      点赞
    • 12
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值