springboot集成shiro 访问静态页面报404,无法加载

springboor集成shiro不得不说遇到的大坑,最近想要练习一下shiro的安全框架。
发现在原来项目基础之上加上了shiro之后,原来的html页面访问报404,百思不得其解。本以为是自己的代码写错了,或者是哪里出现了问题。经过在网上翻阅询问之后,发现竟然是自己的shiro框架搞的鬼,被自己的shiro框架给拦截了。

下面我只将自己的shiroConfig配置文件展现给大家,因为该框架还没有完善,以后我将陆续的一一为大家呈现。、

package com.zmj.config;

import com.zmj.realm.MyRealm;
import org.apache.shiro.authc.credential.CredentialsMatcher;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * 创建一个shiro的配置类
 */
@Configuration
public class ShiroConfig {
    /**
     * 创建一个过滤器
     */
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager securityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
//        设置过滤器链  设置过滤规则
        /**
         * anon  代表不过滤  放行
         * authc  代表过滤  认证
         * 放行优先于认证
         */
        Map map=new HashMap();
//        map.put("**/login.html","anon");
        map.put("/**/login.html","anon");
        map.put("/login","anon");
        map.put("/regist.jsp","anon");
        map.put("/regist","anon");
        map.put("/css/**","anon");
        map.put("/audio/**","anon");
        map.put("/img/**","anon");
        map.put("/js/**","anon");
        map.put("/json/**","anon");
        map.put("/script/**","anon");
        map.put("/themes/**","anon");

        map.put("/**","authc");

        shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        return shiroFilterFactoryBean;
    }


    @Bean
    public DefaultWebSecurityManager getSecurityManager(MyRealm myRealm){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//         设置自定义realm
        securityManager.setRealm(myRealm);
        return securityManager;
    }
    /**
     * 创建自定义realm
     */
    @Bean
    public MyRealm getRealm(CredentialsMatcher credentialsMatcher){
        MyRealm myRealm = new MyRealm();
//        加密处理   设置密码处理凭证器
        myRealm.setCredentialsMatcher(credentialsMatcher);
        return myRealm;
    }
/**
 * 设置密码凭证器  对密码进行1024次解密
 */
    @Bean
    public CredentialsMatcher getCredentialsMatcher(){
        HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
        //设置算法名字
        credentialsMatcher.setHashAlgorithmName("md5");
        //设置散列次数
        credentialsMatcher.setHashIterations(1024);
        return credentialsMatcher;
    }
    /**
     *  开启shiro aop注解支持.
     *  使用代理方式;所以需要开启代码支持;否则@RequiresRoles等注解无法生效
     * @param securityManager
     * @return
     */
    /*@Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }*/
}

在这里插入图片描述
值的注意的就是我截图给大家的这一点,表示shiro的放行规则,anon表示放行,authc表示不放行(及表示登录之后才会允许访问),注意:我们一般将放行的写在上面,最后将所有的都列为不放行,写在最后。自我感觉还是为了安全

我的map集合中,第一个put中放入了login.html,及表示放行,所以我们就能够加载出该html页面。这也就是我为什么刚开始所说的为什么整合shiro过后访问静态资源出现404状况,这是被自己拦截了啊!!!

这辈子坚持与不坚持都不可怕,可怕的是独自走在坚持的道路上!!!

欢迎加入技术群聊!
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
对于Spring Boot集成Shiro,你可以按照以下步骤进行操作: 1. 首先,在你的Spring Boot项目中添加Shiro的依赖。你可以在pom.xml文件中添加以下依赖关系: ```xml <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-starter</artifactId> <version>1.7.1</version> </dependency> ``` 2. 创建一个Shiro的配置类,用于配置Shiro的相关组件和属性。可以使用`@Configuration`注解来标记该类作为配置类,并使用`@EnableShiroAnnotation`注解来启用Shiro的注解支持。 ```java @Configuration @EnableShiroAnnotation public class ShiroConfig { // 配置Shiro的相关组件和属性 // ... } ``` 3. 在上述配置类中,可以配置Shiro的Realm、Session管理器、缓存管理器等组件。你可以根据自己的需求选择相应的实现类并进行配置。 ```java @Configuration @EnableShiroAnnotation public class ShiroConfig { @Bean public Realm realm() { // 配置自定义的Realm实现类 // ... return realm; } @Bean public SessionManager sessionManager() { // 配置自定义的Session管理器实现类 // ... return sessionManager; } @Bean public CacheManager cacheManager() { // 配置自定义的缓存管理器实现类 // ... return cacheManager; } // 其他配置项... } ``` 4. 在主配置类中,添加`@Import`注解来引入Shiro的配置类。 ```java @SpringBootApplication @Import(ShiroConfig.class) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 5. 在需要进行权限控制的地方,使用Shiro的注解来标记需要进行权限验证的方法或类。例如,可以使用`@RequiresRoles`注解来限制具有特定角色的用户才能访问方法。 ```java @RestController public class YourController { @RequiresRoles("admin") @GetMapping("/admin") public String admin() { return "Hello, admin!"; } } ``` 这样,你就成功地集成了Spring Boot和Shiro,并可以进行基于角色的权限控制了。当然,以上只是一个简单的示例,你可以根据自己的需求进行更详细的配置和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值