最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shiro整合springmvc配置靜態(tài)資源過濾方式

 更新時間:2026年03月14日 09:22:15   作者:快樂的小三菊  
文章介紹了在Spring Boot + Spring MVC + Shiro + JSP項目中,如何正確配置靜態(tài)資源路徑以避免在引入Shiro過濾器后資源加載失敗的問題

一、背景

最近在看 shiro 的過濾器,是基于springboot + spring mvc + shiro + jsp 構(gòu)建的一個小工程,我想在 jsp 的頁面中加載 jscss 和一些圖片資源,遇到的一些小的問題,在此記錄一下。

二、標(biāo)簽

先看下 application.properties 里面的兩個標(biāo)簽,下面的這個標(biāo)簽,只有靜態(tài)資源的訪問路徑為為 /static/** 時,才會處理該請求。

比如:訪問http://localhost:8080/static/css/index.css,處理的方式是根據(jù)模式匹配后的文件名查找本地文件。按照 spring.resources.static-locations 指定的位置查找本地文件。

spring.mvc.static-path-pattern=/static/**

再看下面這個標(biāo)簽,這個標(biāo)簽是自定義 springboot 前端靜態(tài)資源的位置,如果不配置,則默認將從如下位置,按照優(yōu)先級查找靜態(tài)資源文件,從左向右是由高到低
spring.resources.static-locations = classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources

spring.resources.static-locations = classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources

三、示例工程

我的 jsp 文件放在了 webapp 文件夾的 page 文件夾下,而我的 js、image css 文件則放在了 resources static 文件夾下,如下所示:

我的初始化登錄界面 login.jsp 的內(nèi)容如下所示,如果此時不引入 shiro ,則下面的界面可以正常顯示,即可以正常的顯示和加載所有的資源。

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>一路發(fā)咨詢網(wǎng)站</title>
</head>
<body>
<script type="text/javascript" src="/static/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="/static/js/login.js"></script>
<link rel="stylesheet" type="text/css" href="/static/css/login.css" rel="external nofollow" />
<h1>歡迎登錄一路發(fā)咨詢網(wǎng)站</h1>

<form action="/login" method="post">
	<div id="father" style="background-image: url('/static/image/index.png');">
		<div style="width:300px;height:100px;">
			<div style="width:150px;float:left">
				<span>用戶名:<span></span>
			</div>
			<div style="width:150px;float:left;">
				<input  style="height:34px" type="text" name="userName"/>
			</div>
		</div>
		<div style="width:300px;height:100px;">
			<div style="width:150px;float:left;">
				<span>密碼:<span></span>
			</div>
			<div style="width:150px;float:left;">
				<input  style="height:34px" type="password" name="password"/>
			</div>
		</div>
		<div style="width:300px;height:100px;">
			<div style="width:64px;float:left;margin-left:280px">
				<input style="height:34px;width:34px;" type="checkbox" name="rememberMe" />
			</div>
			 <div style="width:150px;float:left;margin-top:-4px">
					<span>記住我<span></span>
			</div>
		</div>
		 <div style="margin-left:190px">
				<input style="height:50px;width:90px;font-size:34px;font-weight:bold" type="submit" value="提交"/>
		</div>
	</div>
</form>
</body>
</html>

四、引入shiro

由于 shiro 擁有過濾器的功能,如果按照下面的這種方式配置,則上面的 login.jsp 里面所需要的 js、css和圖片資源都無法正常加載。

@Bean
	public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
		ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
		// Shiro的核心安全接口,這個屬性是必須的
		shiroFilter.setSecurityManager(securityManager);		
		//身份認證失敗,則跳轉(zhuǎn)到登錄頁面的配置 沒有登錄的用戶請求需要登錄的頁面時自動跳轉(zhuǎn)到登錄頁面,不是必須的屬性,
        //不輸入地址的話會自動尋找項目web項目的根目錄下的”/login.jsp”頁面。
		shiroFilter.setLoginUrl("/page/login.jsp");
		//自定義過濾
		Map<String, String> map = new LinkedHashMap<>();
		// 不能對login方法進行攔截,若進行攔截的話,這輩子都登錄不上去了,這個login是LoginController里面登錄校驗的方法
		map.put("/login", "anon");
		//對所有請求進行攔截
		map.put("/**", "authc");
		shiroFilter.setFilterChainDefinitionMap(map);
		return shiroFilter;
	}

五、解決方式

只需要在上面的這個方法中,加一個過濾條件即可,如下所示,千萬記得map.put("/**", "authc")這個攔截條件要放在最后。

@Bean
	public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
		ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
		// Shiro的核心安全接口,這個屬性是必須的
		shiroFilter.setSecurityManager(securityManager);		
		//身份認證失敗,則跳轉(zhuǎn)到登錄頁面的配置 沒有登錄的用戶請求需要登錄的頁面時自動跳轉(zhuǎn)到登錄頁面,不是必須的屬性,
        //不輸入地址的話會自動尋找項目web項目的根目錄下的”/login.jsp”頁面。
		shiroFilter.setLoginUrl("/page/login.jsp");
		//自定義過濾
		Map<String, String> map = new LinkedHashMap<>();
		// 不能對login方法進行攔截,若進行攔截的話,這輩子都登錄不上去了,這個login是LoginController里面登錄校驗的方法
		map.put("/login", "anon");
		map.put("/static/**", "anon");
		//對所有請求進行攔截
		map.put("/**", "authc");
		shiroFilter.setFilterChainDefinitionMap(map);
		return shiroFilter;
	}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring MVC+FastJson+hibernate-validator整合的完整實例教程

    Spring MVC+FastJson+hibernate-validator整合的完整實例教程

    這篇文章主要給大家介紹了關(guān)于Spring MVC+FastJson+hibernate-validator整合的完整實例教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • mybatis-plus的sql加載順序源碼解析

    mybatis-plus的sql加載順序源碼解析

    這篇文章主要為大家介紹了mybatis-plus的sql加載順序源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Springmvc RequestMapping請求實現(xiàn)方法解析

    Springmvc RequestMapping請求實現(xiàn)方法解析

    這篇文章主要介紹了Springmvc RequestMapping請求實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Maven項目在new module后,pom文件顯示為Ignored pom.xml問題

    Maven項目在new module后,pom文件顯示為Ignored pom.xml問題

    在Maven項目中,若創(chuàng)建過同名module后刪除,再次創(chuàng)建時可能導(dǎo)致pom.xml文件被IDEA忽略,原因是IDEA保留了之前module的痕跡,導(dǎo)致重建時將其視為已刪除的module,解決方法是進入IDEA設(shè)置,找到Maven的Ignored Files設(shè)置
    2024-09-09
  • spring bean.xml文件p標(biāo)簽使用報錯的解決

    spring bean.xml文件p標(biāo)簽使用報錯的解決

    這篇文章主要介紹了spring bean.xml文件p標(biāo)簽使用報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java利用棧實現(xiàn)簡易計算器功能

    Java利用棧實現(xiàn)簡易計算器功能

    這篇文章主要為大家詳細介紹了Java利用棧實現(xiàn)簡易計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java開發(fā)ShardingSphere的路由引擎類型示例詳解

    java開發(fā)ShardingSphere的路由引擎類型示例詳解

    這篇文章主要為大家介紹了java開發(fā)ShardingSphere的路由引擎類型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 解決項目沒有build path的問題

    解決項目沒有build path的問題

    這篇文章主要介紹了解決項目沒有build path的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • java 實現(xiàn)當(dāng)前時間加減30分鐘的時間代碼

    java 實現(xiàn)當(dāng)前時間加減30分鐘的時間代碼

    這篇文章主要介紹了java 實現(xiàn)當(dāng)前時間加減30分鐘的時間代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java?C++算法題解leetcode801使序列遞增的最小交換次數(shù)

    Java?C++算法題解leetcode801使序列遞增的最小交換次數(shù)

    這篇文章主要為大家介紹了Java?C++題解leetcode801使序列遞增的最小交換次數(shù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10

最新評論

余干县| 庄河市| 东乡族自治县| 洛宁县| 兰西县| 盘山县| 通城县| 汤阴县| 崇明县| 科尔| 崇州市| 平远县| 始兴县| 友谊县| 玉树县| 佛山市| 霍州市| 潢川县| 武山县| 安塞县| 广昌县| 荃湾区| 拜泉县| 博爱县| 青神县| 闻喜县| 柳州市| 弥勒县| 噶尔县| 本溪市| 盖州市| 崇文区| 乌拉特中旗| 华宁县| 祁连县| 平安县| 重庆市| 攀枝花市| 朝阳市| 土默特左旗| 晴隆县|