国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Shiro 之認證登錄的dem

2019-11-08 02:40:40
字體:
來源:轉載
供稿:網友

1 shiro登錄的簡單demo

1.1 web.xml添加shiroFilter

<!-- shiro過慮器,DelegatingFilterPRox會從spring容器中找shiroFilter -->

       <filter>

       <filter-name>shiroFilter</filter-name>

       <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

              <init-param>

                     <param-name>targetFilterLifecycle</param-name>

                     <param-value>true</param-value>

              </init-param>

       </filter>

       <filter-mapping>

              <filter-name>shiroFilter</filter-name>

              <url-pattern>/*</url-pattern>

       </filter-mapping>

 

1.2 applicationContext-shiro.xml

<!-- Shiro 的Web過濾器 -->

       <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">

              <property name="securityManager" ref="securityManager" />

              <!-- 如果沒有認證將要跳轉的登陸地址,http可訪問的url,如果不在表單認證過慮器FormAuthenticationFilter中指定此地址就為身份認證地址 -->

              <property name="loginUrl" value="/login.action" />

<!-- 沒有權限跳轉的地址 -->

              <property name="unauthorizedUrl" value="/refuse.jsp" />

<!-- shiro攔截器配置 -->

              <property name="filters">

                     <map>

                            <entry key="authc" value-ref="formAuthenticationFilter" />

                     </map>

              </property>

              <property name="filterChainDefinitions">

                     <value>

                            <!-- 必須通過身份認證方可訪問,身份認 證的url必須和過慮器中指定的loginUrl一致 -->

                            /loginsubmit.action = authc

                            <!-- 退出攔截,請求logout.action執行退出操作 -->

                            /logout.action = logout

                            <!-- 無權訪問頁面 -->

                            /refuse.jsp = anon

                            <!-- roles[XX]表示有XX角色才可訪問 -->

                            /item/list.action = roles[item],authc

                            /js/** anon

                            /images/** anon

                            /styles/** anon

                            <!-- user表示身份認證通過或通過記住我認證通過的可以訪問 -->

                            /** = user

                            <!-- /**放在最下邊,如果一個url有多個過慮器則多個過慮器中間用逗號分隔,如:/** = user,roles[admin] -->

 

                     </value>

              </property>

       </bean>

 

 

       <!-- 安全管理器 -->

       <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

              <property name="realm" ref="userRealm" />

             

       </bean>

 

       <!-- 自定義 realm -->

       <bean id="userRealm" class="cn.itcast.ssm.realm.CustomRealm1">

       </bean>

       <!-- 基于Form表單的身份驗證過濾器,不配置將也會注冊此過慮器,表單中的用戶賬號、密碼及loginurl將采用默認值,建議配置 -->

       <bean id="formAuthenticationFilter"

              class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">

              <!-- 表單中賬號的input名稱 -->

              <property name="usernameParam" value="usercode" />

              <!-- 表單中密碼的input名稱 -->

              <property name="passWordParam" value="password" />

              <!-- <property name="rememberMeParam" value="rememberMe"/> -->

              <!-- loginurl:用戶登陸地址,此地址是可以http訪問的url地址 -->

              <property name="loginUrl" value="/loginsubmit.action" />

       </bean>

 

securitymanager:這個屬性是必須的

loginUrl:沒有登錄認證的用戶請求將跳轉到此地址,不是必須的屬性,不輸入地址的話會自動尋找項目web項目的根目錄下的“/login.jsp”頁面

unanthorizedUrl:沒有權限默認跳轉的頁面

 

1.3 使用shiro注解授權

在springmvc.xml中配置shiro注解支持,可在controller方法中使用shiro注解配置權限:

 

<!-- 開啟aop,對類代理 -->

       <aop:config proxy-target-class="true"></aop:config>

       <!-- 開啟shiro注解支持 -->

       <bean

              class="

org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">

              <property name="securityManager" ref="securityManager" />

       </bean>

 

修改Controller代碼,在方法上添加授權注解,如下:

 

// 查詢商品列表

       @RequestMapping("/queryItem")

       @RequiresPermissions("item:query")

       public ModelAndView queryItem() throws Exception {

 

上邊代碼@RequiresPermissions(“item:query”)表示必須擁有“item:query”權限方可執行。

 

1.4 退出

由于使用shiro的sessionManager,不用開發退出功能,使用shiro的logout攔截器即可。

 

<!-- 退出攔截,請求logout.action執行退出操作 -->

/logout.action = logout

 

1.5 緩存

    shiro每個授權都會通過realm獲取權限信息,為了提高訪問速度需要添加緩存,第一次從realm中讀取權限數據,之后不再讀取,這里Shiro和Ehcache整合。

1.5.1 配置

    在applicationContext-shiro.xml中配置緩存管理器

<!-- 安全管理器 -->

       <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

              <property name="realm" ref="userRealm" />

              <property name="sessionManager" ref="sessionManager" />

              <property name="cacheManager" ref="cacheManager"/>

       </bean>

 

<!-- 緩存管理器 -->

    <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">

    </bean>

1.5.2 session管理

在applicationContext-shiro.xml中配置sessionManager:

<!-- 安全管理器 -->

       <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

              <property name="realm" ref="userRealm" />

              <property name="sessionManager" ref="sessionManager" />

       </bean>

<!-- 會話管理器 -->

    <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">

        <!-- session的失效時長,單位毫秒 -->

        <property name="globalSessionTimeout" value="600000"/>

        <!-- 刪除失效的session -->

        <property name="deleteInvalidSessions" value="true"/>

    </bean>

 

1.6 驗證碼

需要在驗證賬號和名稱之前校驗驗證碼。

 

public class MyFormAuthenticationFilter extends FormAuthenticationFilter {

       protected boolean onaccessDenied(ServletRequest request,

                     ServletResponse response, Object mappedValue) throws Exception {

 

              // 校驗驗證碼

              // 從session獲取正確的驗證碼

              HttpSession session = ((HttpServletRequest)request).getSession();

              //頁面輸入的驗證碼

              String randomcode = request.getParameter("randomcode");

              //從session中取出驗證碼

              String validateCode = (String) session.getAttribute("validateCode");

              if (!randomcode.equals(validateCode)) {

                     // randomCodeError表示驗證碼錯誤

                     request.setAttribute("shiroLoginFailure", "randomCodeError");

                     //拒絕訪問,不再校驗賬號和密碼

                     return true;

              }

             

              return super.onAccessDenied(request, response, mappedValue);

       }

}

 

修改applicationContext-shiro.xml中對FormAuthenticationFilter的配置。

 

<bean id="formAuthenticationFilter"

              class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">

 

改為

             

<bean id="formAuthenticationFilter"

              class="cn.itcast.ssm.shiro.MyFormAuthenticationFilter">

 

1.7 記住我

    用戶登錄選擇“自動登錄”本次登錄成功會向cookie寫身份信息,下次登錄從cookie中取出身份信息實現自動登錄。

    向cookie記錄身份信息需要用戶身份信息對象實現序列化接口。

 

1.7.1 配置

    <!-- 安全管理器 -->

       <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

              <property name="realm" ref="userRealm" />

              <property name="sessionManager" ref="sessionManager" />

              <property name="cacheManager" ref="cacheManager"/>

              <!-- 記住我 -->

              <property name="rememberMeManager" ref="rememberMeManager"/>

       </bean>

 

<!-- rememberMeManager管理器 -->

       <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">

              <property name="cookie" ref="rememberMeCookie" />

       </bean>

       <!-- 記住我cookie -->

       <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">

              <constructor-arg value="rememberMe" />

              <!-- 記住我cookie生效時間30天 -->

              <property name="maxAge" value="2592000" />

       </bean>

 

 

修改formAuthenticationFitler添加頁面中“記住我checkbox”的input名稱:

 

<bean id="formAuthenticationFilter"

              class="cn.itcast.ssm.shiro.MyFormAuthenticationFilter">

              <!-- 表單中賬號的input名稱 -->

              <property name="usernameParam" value="usercode" />

              <!-- 表單中密碼的input名稱 -->

              <property name="passwordParam" value="password" />

              <property name="rememberMeParam" value="rememberMe"/>

              <!-- loginurl:用戶登陸地址,此地址是可以http訪問的url地址 -->

              <property name="loginUrl" value="/loginsubmit.action" />

       </bean>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长宁区| 新和县| 垫江县| 和政县| 泸西县| 贺州市| 苗栗市| 陆良县| 磐石市| 武义县| 沾化县| 通化市| 咸阳市| 金塔县| 孝感市| 阿尔山市| 海城市| 泾阳县| 曲沃县| 理塘县| 海林市| 灵山县| 景洪市| 奉化市| 郑州市| 本溪| 灵川县| 堆龙德庆县| 曲水县| 铅山县| 鱼台县| 长葛市| 闽侯县| 斗六市| 广德县| 喜德县| 文登市| 朝阳区| 沁源县| 太仆寺旗| 疏附县|