Shiro 教程,Shiro教程0.2 下載,Shiro功能修復與升級說明。

shiro demo下載

Shiro + SSM(框架) + Freemarker(jsp)講解的權限控制Demo,還不趕快去下載?html

原文連接:http://www.sojson.com/blog/165.htmljava

本項目詳細介紹:http://www.sojson.com/shiromysql

前言:本教程適合有必定基礎的 Java程序員使用,若是對 Shiro 有必定的瞭解,過程當中會很快接受,建議在使用 Shiro教程Demo的時候,建議直接Maven,教程Demo中沒有對Maven過多的依賴,只有一個依賴包的管理,若是對Maven不熟悉,你能夠 安裝一個MyEclipse8.5,自帶Maven環境,本站有 在線生成MyEclipse註冊碼。注意,開始無論你技術多牛,無論個人文檔寫的有多麼很差,都建議你看完,這樣大概內心有個數,Demo裏有什麼功能, 哪些地方怎麼實現的?都知道個大概。git

主要解決是以前說的問題:Shiro 教程,關於最近反應的相關異常問題,解決方法合集。程序員

項目在本頁面的附件中提取。github

1、Cache配置修改。

配置文件(spring-cache.xml )中已經修改成以下配置:web

 
  1. <!-- redis 配置,也能夠把配置挪到properties配置文件中,再讀取 -->
  2. <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
  3. <constructor-arg index="0" ref="jedisPoolConfig" />
  4. <constructor-arg index="2" value="6379" name="port" type="int"/>
  5. <constructor-arg index="3" value="5000" name="timeout" type="int"/>
  6. <constructor-arg index="1" value="127.0.0.1" name="host" type="java.lang.String"/>
  7. </bean>
  8. <!--
  9. 這種 arguments 構造的方式,以前配置有缺點。
  10. 這裏以前的配置有問題,由於參數類型不一致,有時候jar和環境的問題,致使參數根據index對應,會處理問題,
  11. 理論上加另外一個 name,就能夠解決,如今把name 和type都加上,更保險。
  12. -->

2、登陸獲取上一個URL地址報錯。

當沒有獲取到退出前的request ,爲null 的時候會報錯。在(UserLoginController.java  )135行處有所修改。redis

 
  1. /**
  2. * shiro 獲取登陸以前的地址
  3. * 以前0.1版本這個沒判斷空。
  4. */
  5. SavedRequest savedRequest = WebUtils.getSavedRequest(request);
  6. String url = null ;
  7. if(null != savedRequest){
  8. url = savedRequest.getRequestUrl();
  9. }
  10. /**
  11. * 咱們日常用的獲取上一個請求的方式,在Session不一致的狀況下是獲取不到的
  12. * String url = (String) request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE);
  13. */

3、刪除了配置文件中的cookie寫入域的問題。

在配置文件裏(spring-shiro.xml )中的配置有所修改。spring

 
  1. <!-- 會話Cookie模板 -->
  2. <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
  3. <!--cookie的name,我故意取名叫xxxxbaidu -->
  4. <constructor-arg value="v_v-s-baidu"/>
  5. <property name="httpOnly" value="true"/>
  6. <!--cookie的有效時間 -->
  7. <property name="maxAge" value="-1"/>
  8. <!-- 配置存儲Session Cookie的domain爲 一級域名
  9. <property name="domain" value=".itboy.net"/>
  10. -->
  11. </bean>

上面配置是去掉了 Session  的存儲Key 的做用域,以前設置的.itboy.net  ,是寫到當前域名的 一級域名  下,這樣就能夠作到N 二級域名  下,三級、四級....下 Session  都是共享的。sql

 
  1. <!-- 用戶信息記住我功能的相關配置 -->
  2. <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
  3. <constructor-arg value="v_v-re-baidu"/>
  4. <property name="httpOnly" value="true"/>
  5. <!-- 配置存儲rememberMe Cookie的domain爲 一級域名
  6. <property name="domain" value=".itboy.net"/>
  7. -->
  8. <property name="maxAge" value="2592000"/><!-- 30天時間,記住我30天 -->
  9. </bean>

記住我登陸的信息配置。和上面配置是同樣的道理,能夠在相同 一級域名  下的全部域名均可以獲取到登陸的信息。

4、簡單實現了單個賬號只能在一處登陸。

咱們在其餘的系統中能夠看到,單個賬號只容許一人使用,在A處登陸了,B處再登陸,那A處就被踢出了。以下圖所示。

PS:這個功能有點問題,之後有時間我再修復,請把shiro_base_auth.ini 文件中的 kickout 去掉便可(2016年9月6日 09:31:47)。

可是此功能不是很完美,當A處被踢出後,再從新登陸,這時候B處反應有點慢,具體我還沒看,由於是以前加的功能,如今凌晨了,下次我有空再瞧瞧,同窗你也能夠看看,解決了和我說一聲,我把功能修復。

5、修復功能(BUG)

1.修復權限添加功能BUG。

以前功能有問題,每當添加一個權限的時候,默認都給角色爲「管理員」的角色默認添加當前新添加的權限。這樣達到管理員的權限永遠是最大的。因爲代碼有BUG ,致使全部權限刪除了。現已修復。

2.修復項目只能部署到Root目錄下的問題。

問題描述:以前項目只能部署到Root 下才能正常運行,目前已經修復,能夠帶項目路徑進行訪問了,以前只能這樣訪問,http://localhost:8080  而不能http://localhost:8080/shiro.demo/ 訪問,目前是能夠了。

解決方案:在 FreeMarkerViewExtend.java 33行處 增長了BasePath ,經過BasePath 來控制請求目錄,在 Freemarker  中能夠自由使用,而 JSP  中是直接在 JSP  中獲取BasePath 使用。

解決後遺症:由於咱們的權限是經過URL 來控制的,那麼增長了項目的目錄,致使權限不能正確的判斷,再加上咱們的項目名稱(目錄)能夠自定義,致使更很差判斷。

後遺症解決方案:PermissionFilter.java 50行處 解決了這個問題,詳情請看代碼和註釋,其實就是replace 了一下。

 
  1. HttpServletRequest httpRequest = ((HttpServletRequest)request);
  2. /**
  3. * 此處是改版後,爲了兼容項目不須要部署到root下,也能夠正常運行,可是權限沒設置目前必須到root 的URI,
  4. * 緣由:若是你把這個項目叫 ShiroDemo,那麼路徑就是 /ShiroDemo/xxxx.shtml ,那另一我的使用,又叫Shiro_Demo,那麼就要這麼控制/Shiro_Demo/xxxx.shtml
  5. * 理解了嗎?
  6. * 因此這裏替換了一下,使用根目錄開始的URI
  7. */
  8.  
  9. String uri = httpRequest.getRequestURI();//獲取URI
  10. String basePath = httpRequest.getContextPath();//獲取basePath
  11. if(null != uri && uri.startsWith(basePath)){
  12. uri = uri.replace(basePath, "");
  13. }

3.項目啓動的時候報錯,關於JNDI的錯誤提示。

其實也不是錯,可是看着不舒服,因此還得解決這個問題。解決這個問題須要在web.xml 中的開始部位加入如下代碼。

 
  1. <context-param>
  2. <param-name>spring.profiles.active</param-name>
  3. <param-value>dev</param-value>
  4. </context-param>
  5. <context-param>
  6. <param-name>spring.profiles.default</param-name>
  7. <param-value>dev</param-value>
  8. </context-param>
  9. <context-param>
  10. <param-name>spring.liveBeansView.mbeanDomain</param-name>
  11. <param-value>dev</param-value>
  12. </context-param>

4.項目Maven打包問題。

打包的時候,不一樣版本的 Eclipse  還有IDEA 會有打包打不進去Mapper.xml 文件,這個時候要加以下代碼(羣裏同窗提供的)。

 
  1. <resources>
  2. <resource>
  3. <directory>src/main/java</directory>
  4. <includes>
  5. <include>**/*.properties</include>
  6. <include>**/*.xml</include>
  7. </includes>
  8. <filtering>false</filtering>
  9. </resource>
  10. </resources>

<build> 標籤內加入便可,若是仍是不能解決,那麼請你加羣(更名後)說明你的問題,有人會回答你。

5.Tomcat7以上在訪問JSP頁面的時候,提示JSTL錯誤。

這個錯誤是由於Tomcat7 中沒有 JSTL  的jar包,如今已經在項目pom.xml 中增長了以下 jar  的引入管理。

 
  1. <dependency>
  2. <groupId>javax.servlet</groupId>
  3. <artifactId>jstl</artifactId>
  4. <version>1.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>javax.servlet</groupId>
  8. <artifactId>jsp-api</artifactId>
  9. <version>2.0</version>
  10. <scope>provided</scope>
  11. </dependency>

若是仍是不能解決問題,請在官方羣(羣號:259217951)內搜索「jstl」 如圖下載依賴包。

便可解決問題。

大概就這些問題。新的項目在附件中下載,已經提交到github 。具體請看 http://www.sojson.com/shiro

新的問題:

ps:個人疏忽,把http://shiro.itboy.net 線上展現的Demo 定時任務+存儲過程提交到github和下載的項目中。錯誤以下:

 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: PROCEDURE shiro_demo.init_shiro_demo does not exist

解決方案,在Spring.xml裏把定時任務註釋(刪除)了。

相關文章
相關標籤/搜索