欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shiro 與 SpringMVC的整合完美示例

 更新時間:2021年08月14日 14:08:34   作者:哦客源  
shiro可以直接和spring整合,但是這樣需要單獨配置spring用于整合shiro,在配置springmvc,接下來通過實例代碼給大家介紹shiro 整合 SpringMVC 的方法,感興趣的朋友一起看看吧

想要整合Shiro和springmvc,在網(wǎng)上找了很多例子,感覺都有一點復(fù)雜。所以就自己寫了一個最簡單整合項目,記錄在這里以備后面查看。

這個例子包含如下三個部分:

1.簡單的頁面

2.shiro配置

3.springmvc配置

shiro可以直接和spring整合,但是這樣需要單獨配置spring用于整合shiro,在配置springmvc。配置文件看起來亂七八糟的。所以這里就shiro不采用spring來管理。因此這里的整合類似 shiro + servlet + springmvc。這樣配置相對簡單好理解。但也是最簡單的配置,只能用于學(xué)習,用在實際項目中,還得改寫。

下面是項目結(jié)構(gòu)圖(realm那個文件夾可有可沒有,只是如果刪除了,就需要將shiro.ini文件中 myrealm = shirospringweb.realm xxxx 那行刪除掉)

下面是具體步驟

(1).添加依賴

既然是簡單,那引用也是最少的,具體如下

dependencies {
    // Use JUnit Jupiter for testing.
    testImplementation 'org.junit.jupiter:junit-jupiter:5.7.1'

    // This dependency is used by the application.
    implementation 'com.google.guava:guava:30.1-jre'
	
	// ++ Adding Spring dependencies
	implementation 'org.springframework:spring-context:5.3.9'
	implementation 'org.springframework:spring-webmvc:5.3.9'
	
	// ++ Using Servlet for SpringMvc
	implementation 'javax.servlet:javax.servlet-api:4.0.1'
	
	// ++ Using shiro-web
	implementation 'org.apache.shiro:shiro-web:1.7.1'
}

其中前面兩個是建立項目自帶的,所以只需要引用后面的四個包就可以咯

(2).Servlet中配置Shiro

在servlet整合shiro,只需要在web.xml中引用shiro的上下文監(jiān)聽器(讀取shiro配置文件),并配置shiro過濾器即可,具體如下:

<!-- Shiro直接攔截,不經(jīng)過spring -->
<listener>
	<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<!-- 對應(yīng)filter-->
<filter>
	<filter-name>shiroFilter</filter-name>
	<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
	</filter>
<!-- filter Mapping-->
<filter-mapping>
	<filter-name>shiroFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

在web.xml中配置好shiro后,需要在WEB-INF文件夾下書寫shiro.ini的配置文件,具體如下

[main]
authc.loginUrl = /login
authc.usernameParam = username
authc.passwordParam = password
authc.successUrl = /
authc.failureKeyAttribute = shiroLoginFailure
logout.redirectUrl = /
myrealm = shirospringweb.realm.MyRealm

[users]
liang = 123, role1
wang = 123, role2

[urls]
/ = anon
/test = anon
/test2 = authc
/login = authc
/logout = logout
/** = anon

這樣shiro就可以配合servlet工作了

(3).配置springMVC

最簡單springmvc的配置,只需要配置一個DispatcherServlet,并在其配置文件(resources/springmvc-base.xml)中打開包掃描,就好了,具體如下:

<!-- 配置SpringMVC -->
<servlet>
	<servlet-name>springServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:springmvc-base.xml</param-value>
	</init-param>
</servlet>
<!-- 對應(yīng)servlet mapping -->
<servlet-mapping>
	<servlet-name>springServlet</servlet-name>
	<url-pattern>/*</url-pattern>
</servlet-mapping>

resources/springmvc-base.xml的配置文件如下(主要是打開包掃描和注解驅(qū)動):

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
		
		
		<context:component-scan base-package="shirospringweb.controller"/>
		
		<mvc:annotation-driven />
		
		<!-- 用來處理當 DispatcherServlet 攔截全部請求的時候,它在RequestHandler處撿出靜態(tài)資源的請求 -->
		<mvc:default-servlet-handler />
		
</beans>

然后書寫上面shiro配置文件中的對應(yīng)controller和前端頁面就可以了。具體如下:

3.1 TestController 及其頁面

TestController的代碼,如下所示

package shirospringweb.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController{
	@RequestMapping("/test")
	public String testPage(){
		return "WEB-INF/pages/test.html";
	}
}

對應(yīng)前端頁面,如下所示(別看他挺多的樣子其實啥也沒有,這里主要是將了一個在springmvc頁面中也是中文的配置,可以當做沒看見)

<html>
	<head>
		<title>TestPage</title>
	</head>
	<body>
		TestPage, 
		<br/>
		This Page only display English character.
		<br />
		To display chineses character, you should add an encoding filter in web.xml, like this
		<br />
		<br />
		<br />
		&lt;filter&gt;<br />
		&lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
		&lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;<br />
		&lt;init-param&gt;<br />
		&nbsp;&nbsp;&nbsp;&nbsp;	&lt;param-name&gt;encoding&lt;/param-name&gt;<br />
		&nbsp;&nbsp;&nbsp;&nbsp;	&lt;param-value&gt;UTF-8&lt;/param-value&gt;<br />
		&lt;/init-param&gt;<br />
		&lt;init-param&gt;<br />
		&nbsp;&nbsp;&nbsp;&nbsp;	&lt;param-name&gt;forceEncoding&lt;/param-name&gt;<br />
		&nbsp;&nbsp;&nbsp;&nbsp;	&lt;param-value&gt;true&lt;/param-value&gt;<br />
		&lt;/init-param&gt;<br />
		&lt;/filter&gt;<br />
		
		&lt;filter-mapping&gt;<br />
		&nbsp;&nbsp;&nbsp;&nbsp;	&lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
		&nbsp;&nbsp;&nbsp;&nbsp;	&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
		&lt;/filter-mapping&gt;<br />

	</body>
</html>

3.2 Test2Controller 及其頁面

Test2Controller的代碼

package shirospringweb.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class Test2Controller {
	
	@RequestMapping("/test2")
	public String getTest2Page(){
		return "WEB-INF/pages/test2.html";
	}
}

其對應(yīng)的界面如下:

<html>
	<head>
		Test 2 Page
	</head>
	<body>
		This is the test 2 page <br/>
		(Can not display chinese Character, more information <a href="/app/test" rel="external nofollow" >click here</a>)
	</body>
</html>

3.3 LoginController 及其對應(yīng)的界面

LoginController的代碼

package shirospringweb.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class LoginController {

	@RequestMapping("/login")
	public String getLogin(){
		return "WEB-INF/pages/login.html";
	}
}

其對應(yīng)的登錄界面

<html>
	<head>Login Page</head>
	<body>
		This is Login Page With No Chinese Character
		<br>
		<form action="/app/login" method="POST">
			username : <input name="username" /><br/>
			password : <input name="password" /><br/>
			<input type="submit" value="LOGIN"/>
		</form>
	</body>
</html>

好了,代碼到這兒完事兒了,下面是運行的效果圖

(4).運行效果

4.1 首先訪問/app/test頁面可以訪問到(shiro未攔截)

頁面如下

4.2 其實訪問/app/test2需要登錄,登錄后需要后跳轉(zhuǎn)(可能需要訪問兩次,有一次請求URL會帶參數(shù),這個shiro會報錯,這是shiro的問題,可以百度解決)具體如下:

登錄后跳轉(zhuǎn)

訪問/logout會退出到主頁面,這個就不截圖了

結(jié)束了

到此這篇關(guān)于shiro 與 SpringMVC的整合完美示例的文章就介紹到這了,更多相關(guān)shiro 整合 SpringMVC 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • eclipse中maven插件安裝教程

    eclipse中maven插件安裝教程

    這篇文章主要為大家詳細介紹了eclipse中maven插件安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java序列化常見的三個問題

    Java序列化常見的三個問題

    這篇文章主要介紹了Java序列化常見的三個問題,幫助大家更好的理解和學(xué)習JAVA,感興趣的朋友可以了解下
    2020-08-08
  • MyBatis-plus更新對象時將字段值更新為null的實現(xiàn)方式

    MyBatis-plus更新對象時將字段值更新為null的實現(xiàn)方式

    mybatis-plus在執(zhí)行更新操作,當更新字段為 空字符串 或者 null 的則不會執(zhí)行更新,如果要將指定字段更新null,可以通過以下三種方式實現(xiàn),感興趣的小伙伴跟著小編一起來看看吧
    2023-10-10
  • SpringBoot+devtools實現(xiàn)熱部署的示例代碼

    SpringBoot+devtools實現(xiàn)熱部署的示例代碼

    在軟件項目的開發(fā)過程中,不可避免的會經(jīng)常修改代碼,每次修改代碼,都需要手動停止然后再啟動服務(wù),最后驗證代碼的正確性,今天通過這篇文章,我們一起來學(xué)習一下如何使用Spring?Boot?+?devtools?輕松搞定熱部署,需要的朋友可以參考下
    2024-08-08
  • MyBatis代碼自動生成器Mybatis-Generator的使用詳解

    MyBatis代碼自動生成器Mybatis-Generator的使用詳解

    本文詳細介紹如何在SpringBoot項目中使用MyBatis-Generator進行代碼生成,包括配置文件的添加、POM依賴配置、運行配置等步驟,通過自動生成代碼,可以簡化MyBatis的繁瑣配置和SQL編寫,提高開發(fā)效率,注意要考慮MySQL版本兼容性,以及確保路徑配置正確
    2024-10-10
  • Java中的邏輯控制語句詳解

    Java中的邏輯控制語句詳解

    下面小編就為大家?guī)硪黄狫ava邏輯控制的基礎(chǔ)文章。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-08-08
  • spring.profiles使用的方法步驟

    spring.profiles使用的方法步驟

    本文主要介紹了spring.profiles使用與spring.profiles.active和spring.profiles.include區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-07-07
  • Java中的ReentrantLock、ReentrantReadWriteLock、StampedLock詳解

    Java中的ReentrantLock、ReentrantReadWriteLock、StampedLock詳解

    這篇文章主要介紹了Java中的ReentrantLock、ReentrantReadWriteLock、StampedLock詳解,讀寫鎖:一個資源能夠被多個讀線程訪問,或者被一個寫線程訪問但是不能同時存在讀寫線程,需要的朋友可以參考下
    2024-01-01
  • 使用Lombok @Builder注解導(dǎo)致默認值無效的問題

    使用Lombok @Builder注解導(dǎo)致默認值無效的問題

    這篇文章主要介紹了使用Lombok @Builder注解導(dǎo)致默認值無效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java使用反射操作數(shù)組示例

    Java使用反射操作數(shù)組示例

    這篇文章主要介紹了Java使用反射操作數(shù)組,結(jié)合實例形式分析了基于java反射機制操作數(shù)組的創(chuàng)建、賦值、輸出等相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07

最新評論