java shiro做页面显示_shiro 静态页面资源不显示 解决方案

最近做一个ssm+shiro的框架整和

不加shiro之前ssm中css和图片显示正常。加上以后无法显示。

解决方案:

shiro有静态资源过滤。

配置资源匿名访问即可

/css/**= anon

/images/**= anon

/img/** =anon

/js/** =anon

/login.jsp = anon

# everything else requires authentication:

/** = authc

配置成功还是无法显示

配置springMVC.xml

SpringMVC提供来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决:

方案一、拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml)

48304ba5e6f9fe08f3fa1abda7d326ab.png

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

48304ba5e6f9fe08f3fa1abda7d326ab.png

方案二、使用默认的静态资源处理Servlet处理静态资源(涉及spring-mvc.xml, web.xml)

在spring-mvc.xml中启用默认Servlet

1

在web.xml中增加对静态资源的处理

48304ba5e6f9fe08f3fa1abda7d326ab.png

1

2 default

3 *.js

4 *.css

5 /assets/*"

6 /images/*

7

48304ba5e6f9fe08f3fa1abda7d326ab.png

但是当前的设置必须在Spring的Dispatcher的前面

方案三、修改Spring的全局拦截设置为*.do的拦截(涉及web.xml)

48304ba5e6f9fe08f3fa1abda7d326ab.png

1

2 SpringMVC

3 org.springframework.web.servlet.DispatcherServlet

4

5 contextConfigLocation

6 classpath:spring-mvc.xml

7

8 1

9 true

10

11

12 SpringMVC

13 *.do

14

48304ba5e6f9fe08f3fa1abda7d326ab.png

这样设置,Spring就会只针对以'.do'结尾的请求进行处理,不再维护静态资源

针对这三种方案的优劣分析:

第一种方案配置比较臃肿,多个拦截器时增加文件行数,不推荐使用;第二种方案使用默认的Servlet进行资源文件的访问,Spring拦截所有请求,然后再将资源文件交由默认的Sevlet进行处理,性能上少有损耗;第三种方案Spring只是处理以'.do'结尾的访问,性能上更加高效,但是再访问路径上必须都以'.do'结尾,URL不太文雅;

综上所述,推荐使用第二和第三中方案

转载https://www.cnblogs.com/banning/p/6195072.html

博主用的是

SsmS

login.jsp

index1.jsp

contextConfigLocation

classpath:applicationContext.xml

org.springframework.web.context.ContextLoaderListener

org.springframework.web.util.IntrospectorCleanupListener

encoding

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

encoding

/*

springDispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

1

springDispatcherServlet

/

shiroFilter

org.springframework.web.filter.DelegatingFilterProxy

targetFilterLifecycle

true

shiroFilter

/*

springmvc.xml

重点来了困扰了三天

然而博主配置了shiro和springmvc后登录的静态页面是可以显示了

但是页面里边的样式无法显示,火狐控制台查看还是404。此去省略一万字。

解决办法:页面中的所有路径和请求都加上它

Insert title here

这篇博主写的不错转载:https://i-blog.csdnimg.cn/blog_migrate/e92f024f52fe56546bef246abcf5b2e2.png

做的一个web项目,需要在jsp页面中获取js、css和图片等资源,本想采用相对路径来写,但是发现可移植性太差,在自己电脑上还好使,但辛辛苦苦调好代码后,放到其他电脑上又得再次辛辛苦苦修改相关路径。于是决定采用绝对路径来写。然后在网上找寻相关方法,发现用的比较多的两个:${pageContext.request.contextPath}和,但具体用哪个我也不大清楚,于是继续查找两者的区别,但让我郁闷的是,网上“抄袭”的真多啊!而且说了一大堆!尽是些不痛不痒的专业名词,关键的真没几个!所以我决定靠自己理解,现在明白了!我想用一种比较通俗的语言分享一下我对此的认识!

可以说${pageContext.request.contextPath}等价于!它们的意思就是取得当前项目名称(或者是--取出部署的应用程序名,不过这么说太官方了,试问有多少人知道“取出部署的应用程序名”的义)那么什么是当前的项目名称呢?

41aa2fb18c85b839bb9a46b24b140a31.png

51246491

假定你的web应用名称为hotel,这个hotel就是当前的项目名称,不过你在浏览器中输入请求路径时,例如输入http//:localhost:8080/hotel/login.jsp

${pageContext.request.contextPath}或就是从这个请求路径(URL)上截取(是截取) /hotel ,看清楚,前面是有"/",而这个“/”代表的是"http//:localhost:8080",看清楚这里是没有"/"的!

对应到真是的物理地址,即为图中WebContent目录!

另外,如果你是在Tomcat的server.xml文件中配置了虚拟目录,例如

9716417870201f89fd44b03066a4d573.png

那么我们在对应的物理目录F:\javaweb中创建test_jsp.jsp文件,内容为

136fbe905f6e7aa6176808329877e2eb.png

开启Tomcat,进行测试,发现输出结果为

d5db09c47d248738c5c5087e12e8e1c9.png

可以看到,此时输出为虚拟目录,并且二者完全等价!

因此,在表单中,这样写路径永远对,翻译过来${pageContext.request.contextPath}/hotel/login.jsp其中的含义,就是http//:localhost:8080/hotel/login.jsp,相当于你写了一全路径!当然前提是你的JSP页面等等必须放置的位置正确才可以,所以才说明路径永远正确。

为什么这么要做呢?因为学过一些MVC模式的程序员都知道,JSP的作用是用来显示的(表现的),其他的作用最好不要在这个页面上显示,尤其是Java代码!所以就用EL表达式来替代类似有“”这样的代码格式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值