shiro框架二:基于URL粗粒度的用户登录

SPSS线性混合模型实战:手把手复现一篇老年认知研究的统计结果(含代码) 本文详细介绍了如何使用SPSS线性混合效应模型复现老年认知研究的统计结果,涵盖数据准备、模型构建、结果解读及可视化全流程。特别针对重复测量数据分析,提供了SPSS菜单操作与语法编写的实用技巧,帮助研究者高效处理复杂数据并验证模型假设。 阅读详情

今天继续学习shiro框架,在基于昨天的基础之上,来进行用户的登录,如果登录成功,则跳转到index.html页面。否则就一直在login.html页面。
上篇播客写到了,项目打开后只能停留在login.html页面,其他页面是不许与登录的,因为在spring-shiro.xml文件中配置了权限authc:为登录无权访问。

好了,废话不多说,今天实现用户等路功能,遇到很多bug。
首先,流产个很重要,有了流程我们才能顺着思路去写代码,Shiro 执行流程, 应用程序 — Subject — SecurityManager — Realm 安全数据。这里解释一下,subject–>SecurityManager是Apache封装好的后台代码,subject会自动去找SecurityManager,大家不要在这里有断层。

应用程序,当然就是我们的controller了,接受请求。
直接上代码

整体思路

// 思路:
        *** controller层
        // 1、创建一个Subject对象
        // 2、将前端请求数据(这里是登录,就是用户名和密码)放到UsernamePasswordToken里
        // 3、Subject.login();  // 该方法会自动去找SecurityManager
        *** 自定义realm
        // 4、然后SecurityManager里的的用我们自己的realm实现类
        // 5、在自定义的realm里请求service层,请求数据,
        // 6、SimpleAuthenticationInfo类的构造方法有3个参数 shiroUser,shiroUser.getPassword(),getName()
        //    6.1:shiroUser 是数据库返回的数据
        //    6.2:shiroUser.getPassword() 从数据库中查询出的密码
        //    6.3:getName()  该方法会自动获得realm的名称
        //    6.4 :第6步的思路:realm类中有两个方法,一个是授权,一个是认证,我们的登录当然是在认证中了,认证之后,才能进入系统,然后                 进行授权。SimpleAuthenticationInfo类中,如果登录成功,即我们的sql语句是按用户的姓名得到的用户,所以姓名没有问题,然后SimpleAuthenticationInfo会根据从数据库中查询出来的密码和用户数据的密码来比较,如果正确则登录成功,否则登录失败。登陆成功之后,我们的认证方法会返回3个返回值(即SimpleAuthenticationInfo的构造函数的3个参数),其中的第一个参数就是我们在数据库中查到的user对象,该方法会将数据返回给subject,此时subject中就有了我们在数据库中查到的user对象(在授权方法里会用到该数据),这个subject也是我们controller在登录的时候所传递过来的那个subject。controller穿过来用户subject(用户的登录信息在这里放着,然后拿到subject中的信息去数据库中查询,如果登录成功就将一些数据保存在subject中,然后我们就可以拿着这个subject中的数据,去进行授权等操作)

controller

@RequestMapping("/user/login.do")
    @ResponseBody
    public ApiResult login(@RequestBody ShiroUser user){

        // 思路:
        *** controller层
        // 1、创建一个Subject对象
        // 2、将前端请求数据(这里是登录,就是用户名和密码)放到UsernamePasswordToken里
        // 3、Subject.login();  // 该方法会自动去找SecurityManager
        *** 自定义realm
        // 4、然后SecurityManager里的的用我们自己的realm实现类
        // 5、在自定义的realm里请求service层,请求数据,
        // 6、SimpleAuthenticationInfo类的构造方法有3个参数 shiroUser,shiroUser.getPassword(),getName()
        //    6.1:shiroUser 是数据库返回的数据
        //    6.2:shiroUser.getPassword() 从数据库中查询出的密码
        //    6.3:getName()  该方法会自动获得realm的名称
        //    6.4 :第6步的思路:realm类中有两个方法,一个是授权,一个是认证,我们的登录当然是在认证中了,认证之后,才能进入系统,然后                 授权。SimpleAuthenticationInfo类中,如果登录成功,即我们的sql语句是按用户的姓名得到的用户,所以姓名没有问题,然后SimpleAuthenticationInfo会根据从数据库中查询出来的密码和用户数据的密码来比较,如果正确则登录成功,否则登录失败

        ApiResult apiResult = new ApiResult();

        // 基于shiro实现登录
        Subject subject = SecurityUtils.getSubject();  
        // 用户名和密码信息
        UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword());
        try {
            subject.login(token);
            apiResult.setMessage("登录成功");
            apiResult.setSuccess(true);

        }catch (Exception e){
            apiResult.setMessage("登录失败");
            apiResult.setSuccess(false);
        }
        return apiResult;
    }

自定义realm

package com.jgs.shirourl.realm;

import com.jgs.shirourl.entity.ShiroUser;
import com.jgs.shirourl.service.impl.ShiroUserServiceImpl;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Component("myRealm") // 这里起的名称在配置文件中要用到
public class MyRealm  extends AuthorizingRealm{


    // 自定义realm 实现 安全数据 连接

    @Autowired(required = true)
    public ShiroUserServiceImpl userService;


    // 授权
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("shiro 授权管理...");
        return null;
    }

    // 认证
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        System.out.println("shiro 认证管理...");

        // 转换token
        UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;


        // 根据用户名查询用户信息
        ShiroUser shiroUser = userService.selectByUserName(usernamePasswordToken.getUsername());

        if(shiroUser == null){
            // 用户不存在
            // 参数1:期望登录后,保存在subject中的信息
            // 参数2:如果返回null,说明用户不存在,报用户名
            // 参数3:realm名
            return null;
        }else{
            // 用户存在
            // 返回用户密码时,securityManager会自动比较返回的密码和用户输入的密码是否一致
            // 如果密码一致,则提示登录成功,如果密码不一致则报密码错误的异常
            return new SimpleAuthenticationInfo(shiroUser,shiroUser.getPassword(),getName());
        }

    }
}

然后我们还要在spring-shiro.xml文件中的securityManager中设置我们自定义的realm
spring-shiro.xml

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm"  ref="myRealm"></property>
    </bean>

spring-shiro.xml的全部代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-4.0.xsd
                            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
                         ">


   <!--<bean id="myRealm" class="com.jgs.shirourl.realm.MyRealm"></bean>-->
    <!--安全管理器-->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm"  ref="myRealm"></property>
    </bean>
    <!-- 配置Shiro核心Filter  -->
    <bean id="shiroFilter"
          class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- 安全管理器 -->
        <property name="securityManager" ref="securityManager" />
        <!-- 未认证,跳转到哪个页面  -->
        <property name="loginUrl" value="/login.html" />
        <!-- 登录页面页面 -->
        <property name="successUrl" value="/index.html" />
        <!-- 认证后,没有权限跳转页面 -->
        <property name="unauthorizedUrl" value="/unauthorized.html" />
        <!-- shiro URL控制过滤器规则  -->
        <!--这里配置过后,所有的请求都经过shiro,然后也只有一下配置了,不登录可以问的才能访问,其他(/**)的都需要登录后才能访问-->
        <property name="filterChainDefinitions">
            <value>
                /login.html* = anon   <!--*表示访问页面的同时,允许传递参数-->
                /login.js = anon
                <!--这里要释放css、和js-->
                /admin/sys/libs/** = anon    <!--两个**表示该文件夹以及该文件夹下的所有子文件夹 -->

                <!--还要释放,登录的接口-->
                /admin/main/user/login.do* = anon

              <!--  /pages/base/courier.html* = perms[courier:list]
                /pages/base/area.html* = roles[base]-->
                /** = authc    <!--登录后才能访问-->
            </value>
            <!--
            anon  未认证可以访问
            authc  认证后可以访问
            perms 需要特定权限才能访问
            roles 需要特定角色才能访问
            user 需要特定用户才能访问
            port  需要特定端口才能访问
            reset  根据指定 HTTP 请求访问才能访问
            -->
        </property>
    </bean>



    <!--shiro后处理器-->
    <bean id="lifecycleBeanPostProcessor"
          class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

</beans>

bug
推荐一个解决bug的帖子:
https://blog.youkuaiyun.com/u014206695/article/details/54672219
ssm和shiro整合,shiro的自定义的realm不能自动注入的问题

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in
class path resource [spring-shiro/spring-shiro.xml]:
Cannot resolve reference to bean 'securityManager' 
while setting bean property 'securityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'securityManager' defined in class path resource [spring-shiro/spring-shiro.xml]:
Cannot resolve reference to bean 'myRealm' while setting bean property 'realm'; 
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'myRealm':
Injection of autowired dependencies failed; 
nested exception is org.springframework.beans.factory.BeanCreationException: 
Could not autowire field: private com.englishload.service.UserService com.englishload.realm.MyRealm.userService; 
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
[com.englishload.service.UserService]
found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. 
Dependency annotations: 
{@org.springframework.beans.factory.annotation.Autowired(required=true)}

注意1:因为我所有的spring配置,和spring整个的东西都放在了springmvc里了,所以这里加载的spring-mvc就是加载了spring
注意2:有一个小bug:在web.xml配置文件中如果spring-shiro.xml配置文件的加载在spring之前那么会报,在spring-shiro.xml配置文件的,权限管理securityManager中找不到我们自定义的这个realm。
原因:在项目加载的时候,容器先加载了spring-shiro.xml,但是此时的realm还没有被spring所扫描,于是就爆出了找不到这个realm类。
解决方法,将spring-shiro.xml放在spring-sprigngmvc.xml的后面。问题解决。
注:我这里的springmvc其实就是spring整合各个框架的资料,就是spring文件。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <!--<param-value>classpath:spring-mybatis.xml spring-service.xml</param-value>-->
    <!-- <param-value>classpath:spring-*.xml</param-value>-->
    <param-value> classpath:spring-mybatis.xml,
                    classpath:spring-mvc.xml,
                    classpath:spring-shiro.xml,
    </param-value>
  </context-param>

附上web.xml的全部代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

  <!--<display-name>shiro-web</display-name>-->
  <display-name>shiro-web</display-name>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <!--<param-value>classpath:spring-mybatis.xml spring-service.xml</param-value>-->
    <!-- <param-value>classpath:spring-*.xml</param-value>-->
    <param-value> classpath:spring-mybatis.xml,
                    classpath:spring-mvc.xml,
                    classpath:spring-shiro.xml,
    </param-value>
  </context-param>



  <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
  </context-param>

  <!-- 编码过滤器 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- spring监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!--shiro的Filter-->
  <!--也就是说,在spring中就得有一个id为shiroFilter的bean-->
<filter>
  <filter-name>shiroFilter</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
  <filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattern>/*</url-pattern><!--这里配置/*:即为拦截所有的资源-->
  </filter-mapping>




  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <!-- 此处也可以配置成 *.do 形式 -->
   <!--<url-pattern>*.do</url-pattern>-->
   <url-pattern>/admin/main/*</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
  </welcome-file-list>

  <!-- session配置 -->
  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

  <!-- springMVC有个拦截器会拦截js css这些引用文件,配置以下取消拦截 -->
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.html</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>


</web-app>
电动汽车远程监控与诊断软件:BMW ConnectedDrive EV远程监控二次开发_7.数据安全与隐私保护 数据加密是保护数据安全的重要手段之一。在电动汽车远程监控与诊断软件中,加密技术可以确保数据在传输过程中的安全性和完整性。常见的加密技术包括对称加密和非对称加密。 阅读详情

相关推荐

ABAP 7.40+新语法实战:用VALUE和REDUCE五分钟搞定复杂内表统计

本文详细介绍了ABAP 7.40+新语法中的VALUE和REDUCE操作符,如何高效处理复杂内表统计任务。通过实战案例展示,这些新语法能将代码量减少70%以上,显著提升开发效率和可读性,特别适合大数据量下的销售数据分析、分组统计等场景。

weixin_27219587的博客 205

Shiro中loginUrl与unauthorizedUrl

项目中有用到Shiro框架,但是只使用了身份认证,即登录功能,未用到授权 权限验证功能,在使用的时候对loginUrl和unauthorizedUrl没有区分太清,一直以为unauthorizedUrl是被拦截后要跳转到的页面,今天特意查了一下,才清楚loginUrl是登录页面,unauthorizedUrl是没有资源权限时跳转到的页面。unauthorizedUrl:没有权限默认跳转的页面,登录的用户访问了没有被授权的资源自动跳转到的页面。在SpringBoot中通过Java代码来实现Shiro的配置。

web15185420056的博客 1041

kaggle:Digit Recognizer《手写数字识别》你的第一个图像识别竞赛项目

新手,入门,巩固复习,深度学习,图像识别

qq_63591092的博客 3097

权限管理系统之集成Shiro实现登录、url和页面按钮的访问控制

小Hub领读:SpringBoot整合Shiro,如何做按钮级别的控制,看完就懂了!作者:小崔笔记本https://www.cnblogs.com/5ishare/p/10461073....

MarkerHub的博客 969

FRM(Financial Risk Manager,金融风险管理师)知识点总结归纳

FRM知识点总结(150字) FRM考试分为两级:一级侧重基础理论和工具,包含风险管理基础、定量分析、金融市场产品、估值与风险建模四大模块,涵盖风险管理框架、统计学方法、衍生品定价及VaR计算等核心内容。二级聚焦实际应用,分为市场风险、信用风险、操作风险、流动性风险、投资管理和市场前沿六大模块,深入探讨高级风险度量技术(如极值理论)、信用风险模型、巴塞尔协议及新兴风险议题。考试体系贯穿"风险识别→度量→管理→监管"逻辑主线,强调定量分析与实务案例的结合,覆盖传统金融风险和区块链、ESG等

极客神殿 1440

STM32L433使用DSP库配置过程

STM32L433中有FPU,在使用中为了使用其中的部分函数,需要对其进行配置。     配置成功后做些总结,留待后续复习备忘,同时也希望有朋友像我一样使用DSP库配置时少走弯路,留作交流。

在在在的博客 4549

shiro中LoginUrl与UnauthorizedUrl的作用

一 描述 1.如shiroconfig的filter 1

健康平安的活着的专栏 1007

R数据分析:潜在剖面分析LPA的做法与解释

Latent Profile Analysis (LPA) tries to identify clusters of individuals (i.e., latent profiles) based on responses to a series of continuous variables (i.e., indicators). LPA assumes that there are unobserved latent profiles that generate patterns of resp.

Codewar的博客 1万+

通过shiro进行按钮及页面访问url的权限控制

super();}/*** 验证登陆*/@Override//根据登录名获取用户信息= null) {} else {}}/*** 登陆成功之后,进行角色和权限验证*/@Override// 列举此用户所有的权限}}/*** 清除所有用户授权信息缓存.*/}/*** 清除所有用户授权信息缓存.*/= null) {}}}/**** @Description: TODO 清楚缓存的授权信息。...

m0_67392931的博客 1614

分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

🔥 分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

XiaoqiangClub的博客 476

【IoT】 产品设计之结构设计:如何设计产品按键

1、硅胶按键功能实现有两种接触方式 1)硅胶按键按压在DOME片(锅仔片)上 通常用在手机、儿童手表手机、防水手机等防水设备上。 2)硅胶按键增加导电基,一种黑色的导电碳粒,实现回路导电 通常用在遥控器、电脑键盘、特殊设备上。 两种方式结构设计原理是一样的,按键的固定与配合间隙与行程要确保好。 2、硅胶遥控器按键的结构方式(导电基) 按键帽为大颗粒实心的,触点为黑色导电基,通过压注成型融合为一体,那么这种按键结构设计时需要注意那些呢? 最主要的是按键按压回弹的手感,由于没有DOME片实现

产品线负责人 8664

shiro框架一 :基于URL粗粒度的页面拦截过滤

对于shiro大家都不陌生,它是一个权限控制框架。 它对权限控制,主要分为两种方式。 1、粗粒度URL级别的权限控制 2、细粒度基于方法的权限控制 其实权限控制的话,也可以自己写,主要用到的技术有 自定义实现:实现权限控制, 可以自己写代码实现 (粗粒度权限控制 Filter、 细粒度权限控制 自 定义注解、代理、反射技术),博主能力有限就不自己写了,,,(其实是写不出来,,,)。还有一...

java_xxxx的博客 3297

【嵌入式Linux驱动开发】二十四、Linux I2C 驱动上手尝试

  人的前程关于眼界、关乎格局。   志之所趋,无远弗届,穷山复海不能限也;   志之所向,无坚不入,锐兵精甲不能御也。 一、I2C驱动框架简介   Linux内核将 I2C 驱动分为两部分: ①、 I2C 总线驱动, I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。 ②、 I2C 设备驱动, I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。 1....

悟已往之不谏 知来者之可追 1068

Apache Shiro实现用户登录功能

Shiro进行权限控制的四种方式 1.在程序中 通过 Subject 编程方式进行权限控制。 2. 配置 Filter 实现 URL 级别粗粒度权限控制。 3. 配置代理,基于注解实现细粒度权限控制。 4. 在页面中使用 shiro 自定义标签实现 页面显示权限控制。 实现用户登录功能 配置 shiro 的 Filter 实现 URL 级别权限控制 1.配置 web.xml。 <fi...

wunianisme的博客 2386

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Shiro的基础知识、回顾URL拦截

本文主要讲解的知识点有以下:权限管理的基础知识模型粗粒度和细粒度的概念回顾URL拦截的实现Shiro的介绍与简单入门只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。用户认证用户授权shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。

zzhongcy的专栏 705

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

springboot整合shiro最全功能

springboot整合shiro,实现登录认证,登录过期,权限拦截 1、权限控制的两种方式:粗粒度基于URL级别权限控制、细粒度基于方法级别权限控制 2、基于Apache Shiro实现登录认证和权限控制,重点讲解shiro权限控制流程、自定义Realm对象控制系统认证和授权 3、Apache Shiro实现细粒度方法级别权限控制 4、动态系统菜单显示功能 5、对认证和授权数据进行缓存优化 粗粒...

qq_41714882的博客 3130

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Apache Shiro权限框架

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。...

fwdwqdwq的博客 507

shiro 同时实现url和按钮的拦截_Shiro权限管理框架(一):Shiro的基本使用

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。先给自己定个博客计划吧,不然很可能又要难产了。本次预计的篇幅量在三篇,第一篇先记录一下Shiro的基本使用,第二篇写一下基于Shiro实现的...

weixin_29051245的博客 223

shiro框架三:基于URL粗粒度的用户授权

撒旦法撒旦法第三方撒旦法撒大放送的

java_xxxx的博客 743

Apache Shiro 框架的基本用法

一、 权限控制两种主要方式 权限控制分为 粗粒度 URL 级别权限控制和细粒度方法级别权限控制 1.可以基于 Filter 实现 在数据库中存放 用户、权限、访问 URL 对应关系, 当前用户访问一个 URL 地址,查 询数据库判断用户当前具有权限,是否包含这个 URL,如果包含允许访问,如果不包含 权限不足 !!! 2.可以代理、自定义注解实现, 访问目标对象方法,在方法上添加权限注解信息,对目...

cailizhu833的博客 469

Shiro(权限控制)

概述: 1、权限控制的两种方式:粗粒度基于URL级别权限控制、细粒度基于方法级别权限控制 2、基于Apache Shiro实现登录认证和权限控制,重点shiro权限控制流程、自定义Realm对象控制系统认证和授权 4、动态系统菜单显示功能 5、对认证和授权数据进行缓存优化; 权限控制的两种方式: 一、粗粒度URL级别权限控制: 可以基于Filter实现:在数据库中存放用户、权限、访问...

weixin_41249041的博客 1659

shiro 基于角色粗粒度与URL细粒度权限控制实现

shiro 注解方式的权限控制基于代理实现,   如果写了用了多个注解会按照内定的顺序一个一个验证, 而不是按使用的先后顺序.   RequiresRoles   RequiresPermissions   RequiresAuthentication   RequiresUser   RequiresGuest   @Bean  @Depend...

diaopu7021的博客 389

Shiro登录验证与鉴权核心流程详解

本文系统解析了Shiro框架在Web安全架构中的登录验证与权限控制机制。Shiro通过过滤器链实现URL级别的粗粒度校验,结合拦截器完成方法级细粒度权限控制,形成双层安全防护体系。文章详细剖析了核心组件(如Subject、SecurityManager、Realm等)的协同工作原理,梳理了登录验证流程的关键方法调用链路,并重点分析了过滤器与拦截器的实现逻辑。通过七个维度的深度拆解,为开发者提供了构建安全防护体系的实践指导,帮助实现从请求入口到业务逻辑的全链路安全管控。

Debug日记的博客 754

Apache Shiro的简单使用

Apache Shiro的简单了解 在java中进行权限控制功能,主要分为粗粒度(基于URL级别权限控制)和细粒度(基于方法级别权限控制)两种。主要使用的框架一般有Spring Security与Apache Shiro,前者使用比较复杂,依赖spring,后者使用更轻量,使用更简单,不完全依赖spring,可以独立使用 粗粒度权限控制(基于URL级别权限控制) 粗粒度权限控制一般主要是基于

屌丝小羊的博客 3871
上一篇: shiro框架一 :基于URL粗粒度的页面拦截过滤
下一篇: shiro框架三:基于URL粗粒度的用户授权
java_xxxx
博客等级 码龄9年 127粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值