使用shiro搭建项目过程中,总是出现引用js的过程中,明明js的地址和引用路径正确,却总是报错如下:
Uncaught SyntaxError: Unexpected token <
页面代码反复的看,找不到原因。jq文件的状态码是302
然后,试着直接在chrome访问jq文件的地址,结果直接跳回去登录界面,才明白shiro拦截了资源文件重定向回到登录界面。
解决问题:【shiro】使用shiro搭建的项目,页面引用js,报错:Uncaught SyntaxError: Unexpected token <
最后发现,是因为shiro的配置中,并未将js路径下的文件放进过滤规则,导致页面引用js时候出现被拦截,出现302状态码,导致重定向到了规定的未登陆页面。
这也就是为什么页面引用Js总出现上面的错误的问题~!
如果用自己编写过滤器,可以在里面过滤掉 /js/**
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
System.out.println("ShiroConfiguration.shiroFilter()");
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// 必须设置SecuritManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 拦截器
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
Map<String, Filter> filterMap = shiroFilterFactoryBean.getFilters();
CaptchaFilter captchaFilter = new CaptchaFilter();
filterMap.put("captchaFilter", captchaFilter);
shiroFilterFactoryBean.setFilters(filterMap);
// 配置退出过滤器,其中的具体代码Shiro已经替我们实现了
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/login", "captchaFilter");
// filterChainDefinitionMap.put("/kaptcha.jpg", "anon");//图片验证码(kaptcha框架)
// <!-- 过滤链定义,从上向下顺序执行,一般将 /**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了;
// <!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
filterChainDefinitionMap.put("/captcha", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/**", "authc");
// 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
shiroFilterFactoryBean.setLoginUrl("/login");
// 登录成功后要跳转的链接
shiroFilterFactoryBean.setSuccessUrl("/index");
// 未授权界面;
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
如果采用编写配置文件的方法,可以在value节点里面加入 /js/** = anon 即可
<!-- Shiro过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- Shiro的核心安全接口,这个属性是必须的 -->
<property name="securityManager" ref="securityManager"/>
<!-- 身份认证失败,则跳转到登录页面的配置 -->
<property name="loginUrl" value="/index.jsp"/>
<!-- 权限认证失败,则跳转到指定页面 -->
<property name="unauthorizedUrl" value="/error.jsp"/>
<!-- Shiro连接约束配置,即过滤链的定义 -->
<property name="filterChainDefinitions" ref="filterChainDefinitions" />
</bean>
<bean name="filterChainDefinitions" class="java.lang.String">
<constructor-arg>
<value>
/=anon
/index.jsp=anon
/login/login.htmls=anon
/js/** = anon
/**=authc
</value>
</constructor-arg>
</bean>