shiro的一点记录

本文详细介绍了如何将Shiro框架集成到基于Spring的Web项目中,包括配置核心拦截器、编写自定义验证和授权方法、创建相关bean以及使用Shiro注解等关键步骤。通过简单的示例,展示了如何实现用户认证和授权的基本功能。

     由于项目的需要,最近开始研究shiro这个框架。shiro是一个安全框架,主要是验证和授权管理,和它类似的有spring security框架,当然,spring security框架更加强大,但是shiro更加灵活(一般小的东西都比较灵活)。

    对于shiro,网上的资料可谓是少之又少。基本上算是被开涛大魔王的一个《跟我学shiro》垄断,当然这个教程是很全面,楼主也是跟着这个教程一点点学的(没办法,没有别的资料啊,很多看不懂的地方没地方找啊,shiro官网的英文看不懂啊卧槽)。虽然过程很痛苦,还好最近对这个框架基本上了解了一些,所以现在敢记录记录。

    这里就不从头开始介绍什么ini配置了,一般都是集成在spring项目里面的,使用maven进行项目管理,这一章先简单的写点基础配置吧。代码是学习的时候写的,还有待修改的地方,不过学习足够了。

  1.     shiro实际上算是一个拦截器,当然得在web.xml中配置:
     
     <!-- 配置shiro的核心拦截器 -->
        <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> 

  2.  对于一个验证和授权框架,我们当然得自己写自己的验证和授权方法。这两个方法在一个叫Realm的类中,要我们自己来写:
    @Component
    public class UserRealm extends AuthorizingRealm {
    
        @Autowired
        private IUserService userService;
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
            String username= (String) principalCollection.getPrimaryPrincipal();
            User user=userService.findByUsername(username);
            //System.out.println("授权"+user);
            if (user!=null)
            {
                SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
                // System.out.println(userService.findRole(username));
                info.addRole(userService.findRole(username));
                info.addStringPermission(userService.findPermissions(username));
                // System.out.println(info);
                return info;
            }
            else  throw new IncorrectCredentialsException();
        }
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
            String username= (String) authenticationToken.getPrincipal();
            String password=new String((char[])authenticationToken.getCredentials());
            User user=userService.findByUsername(username);
            System.out.println(user);
            if(user!=null)
            {
                if(password.equals(user.getPassword())){
    
                    Session session= SecurityUtils.getSubject().getSession();
                    session.setAttribute("username",user.getUsername());
                    return new SimpleAuthenticationInfo(username,password,getName());
                }
                else throw new UnknownAccountException();
    
            }
            else
            {
                throw new UnknownAccountException();
            }
    
    
        }


  3. 大家都知道spring的尿性,你用它,就得在他的配置文件里创建相应的bean。shiro也不例外,要在他的配置文件里面创建跟web.xml中你配置的拦截器名字一样的bean。
    分几个小步吧:
    1)最重要的你要有一个shiroFilter的bean
     <!--配置shiroFilter-->
        <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
            <property name="securityManager" ref="securityManager"/>
            <!-- 登录路径-->
            <property name="loginUrl" value="/jsp/login.jsp"/>
            <!--登录成功路径-->
            <property name="successUrl" value="/jsp/loginSuccess.jsp"/>
            <!--授权失败路径-->
            <property name="unauthorizedUrl" value="/jsp/unauthorized.jsp"/>
            <property name="filters">
                <util:map>
                    <entry key="authc" value-ref="formAuthenticationFilter"/>
                    <entry key="stateless" value-ref="statelessFilter"/>
                    <!--<entry key="ssl" value-ref="sslFilter"/>-->
                </util:map>
            </property>
            <!--过滤链定义-->
            <property name="filterChainDefinitions">
                <value>
                    /jsp/login.jsp=anon
                    /jsp/loginSuccess.jsp=authc
                    /jsp/logout.jsp=logout
                    /jsp/success.jsp=user
                    /static/**=anon
                    /hello**=stateless
                </value>
            </property>
        </bean>

           2)它还得需要一个叫安全管理器的东东:
            

    <!--配置securityManager-->
     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="userRealm"/>
    </bean>
        3)安全管理器需要一个Realm的东东,就是刚才自己写的那个,配置上就可以了:
           
     <!--Realm实现-->
    <bean id="userRealm" class="com.pps.sps.realm.UserRealm" >
    </bean>
       4)shiro的生命周期管理器,人家都加了,我不加也不好看:
          
   <!-- Shiro生命周期处理器-->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
  

      倘若需要使用注解,在springMVC的配置文件中引入这个配置文件,加上注解的配置就可以了:
   

    <!--使用shiro注解-->
    <import resource="spring-shiro.xml"/>
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
        <property name="proxyTargetClass" value="true"></property>
    </bean>
    <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager"></property>
    </bean>

    嗯,这样一个最基本的shiro框架就集成到spring的web项目中去了,这里没有使用缓存,没有使用会话管理,没有用到SSL。。。反正就是啥高级都没有,就一个简单的框架,但是基本上就可以拦截你的信息了。OK,今天先写到这吧,回头再写。

      

        

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化与经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本与能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参与调度等方面的有效性,为低碳能源系统的设计与运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模与优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发与仿真验证。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值