• shiro启用注解方式


    shiro验证权限方式一种是基于url配置文件:

    例如:

     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
            <property name="securityManager" ref="securityManager"/>
    
            <!-- 登录页面 ,用户 登录不成功自动 返回该页面 -->
            <property name="loginUrl" value="/login"/>
    
            <!-- 登录成功页面,登录成功后跳转到该页面  -->
            <property name="successUrl" value="/index"/>
    
            <!-- 无权访问跳转页面  -->
            <property name="unauthorizedUrl" value="permNo"/>
    
            <!-- 自定义权限页面设置url的访问权限。anon表示不用验证,
            都可以访问。anthc:authc filter 监听,不登陆不能访问。logout:logout filter监听。
            没有列出的常用配置:perms["remote:invoke"] :需要角色romote 和权限invoke才能访问。roles["admin"]需要角色admin才能访问。设置可用“,”隔开,
            如:/admin/test = authc,roles[admin]  -->
    
            <property name="filterChainDefinitions">
                <value>
                    <!--  无参,表示需认证才能使用 -->
              /home=authc
                    /resources/**=anon
    
                </value>
            </property>
        </bean>

    另外一种是基于注解:

    例如:

    RequiresAuthentication注解

    RequiresAuthentication注解要求在访问或调用被注解的类/实例/方法时,Subject在当前的session中已经被验证。

    @RequiresAuthentication
    
    public void updateAccount(Account userAccount) {
    
    //this method will only be invoked by a
    
    //Subject that is guaranteed authenticated
    
    ...
    
    }

    RequiresGuest注解

    RequiresGuest注解要求当前Subject是一个“访客”,也就是,在访问或调用被注解的类/实例/方法时,他们没有被认证或者在被前一个Session记住。

    @RequiresGuest
    
    public void signUp(User newUser) {
    
    //this method will only be invoked by a
    
    //Subject that is unknown/anonymous
    
    ...
    
    }

    RequiresPermissions 注解

    RequiresPermissions 注解要求当前Subject在执行被注解的方法时具备一个或多个对应的权限。

    @RequiresPermissions("account:create")
    
    public void createAccount(Account account) {
    
    //this method will only be invoked by a Subject
    
    //that is permitted to create an account
    
    ...
    
    }

    RequiresRoles 注解

    RequiresPermissions 注解要求当前Subject在执行被注解的方法时具备所有的角色,否则将抛出AuthorizationException异常。

    @RequiresRoles("administrator")
    
    public void deleteUser(User user) {
    
    //this method will only be invoked by an administrator
    
    ...
    
    }

    如果在Controller中如果直接使用上面标签是不起作用的,需要开启shiro注解

    bean id="myRealm" class="com.controller.MyRealm"/>
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
            <property name="realm" ref="myRealm"/>
        </bean>
    
        <!--========================-如果使用注解方式验证将下面代码放开===============================-->
        <!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
        <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
    
        <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
            <property name="proxyTargetClass" value="true" />
        </bean>
    
        <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
            <property name="securityManager" ref="securityManager"/>
        </bean>
        <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="exceptionMappings">
                <props>
                    <!--登录-->
                    <prop key="org.apache.shiro.authz.UnauthenticatedException">
                        redirect:/login
                    </prop>
                    <!--授权-->
                    <prop key="org.apache.shiro.authz.UnauthorizedException">
                        redirect:/admin/common/exceptionLog
                    </prop>
                </props>
            </property>
            <property name="defaultErrorView" value="error/genericView"/>
        </bean>

    其中com.controller.MyRealm类是我自定义的继承自AuthorizingRealm的类

  • 相关阅读:
    JS中for循环两种写法的坑
    office web apps安装部署,配置https,负载均衡(三)服务器连接域控制器
    office web apps安装部署,配置https,负载均衡(二)域控制器安装并配置域账号
    office web apps安装部署,配置https,负载均衡(一)背景介绍
    如何申请阿里云免费SSL证书(可用于https网站)并下载下来
    树莓派Raspberry实践笔记-常用Linux命令
    树莓派Raspberry实践笔记—轻松解决apt-get慢的问题
    树莓派Raspberry实践笔记-Arduino IDE
    树莓派Raspberry实践笔记—显示分辨率配置
    关于如何坚持自学的3本图书分享
  • 原文地址:https://www.cnblogs.com/lvlv/p/5104758.html
Copyright © 2020-2023  润新知