1. 程式人生 > >springmvc配置shiro進行許可權控制

springmvc配置shiro進行許可權控制

Shiro是一個強大易用的Java安全框架,提供了認證、授權、加密和會話管理等功能。本文將簡單介紹springmvc中如何配置shiro。

1.首先是maven中配置shiro所需要的jar包

<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.3</version>
</dependency>

<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.2.3</version>
</dependency>

<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>1.2.3</version>
</dependency>

<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.3</version>
</dependency>

2.往web.xml中配置shiro過濾器

<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>

3.在web.xml中配置shiro所要攔截的請求或資源

<!--攔截所有.do請求-->

<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

4.在spring的配置檔案中配置shiro

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

<!-- Shiro的核心安全介面,這個屬性是必須的 --> 

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

<!-- 登入的頁面,當shiro驗證不同過的時候,會進入該頁面,請根據自己專案的實際需求配置 -->

<property name="loginUrl" value="/views/common/login.jsp" />

<!-- 登入成功之後跳轉的頁面 -->
<property name="successUrl" value="/views/login.jsp" />

<!-- 定義shiro過濾規則 -->
<property name="filterChainDefinitions">

<value>

<!-- 這裡面配置響應的請求一及所需的許可權 -->

<!-- authc表示僅需對 /information/deal_change.do進行登入驗證,即必須登入之後才可以正常傳送改請求,如果沒有登入,即會跳轉到上邊配置好的loginUrl對應的頁面-->

/information/deal_change.do = authc

<!-- 此處表示既要登入,而且只允許角色是[]裡面定義好的角色才可以訪問-->

/demand/getDemand.do = authc,perms[designer]

</value>

在spring配置檔案中再新增如下配置其他配置

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!--設定自定義realm -->
<property name="realm" ref="monitorRealm" />
</bean>


<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />


<!--自定義Realm 繼承自AuthorizingRealm -->
<bean id="monitorRealm" class="com.gdqy.FCS.common.api.MonitorRealm"></bean>
<!-- securityManager -->
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="staticMethod"
value="org.apache.shiro.SecurityUtils.setSecurityManager" />
<property name="arguments" ref="securityManager" />
</bean>
<bean
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager" />
</bean>
配置到此就已經完成

接下來就是編寫自定義的realm

package com.gdqy.FCS.common.api;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;

import com.gdqy.FCS.entity.User;
import com.gdqy.FCS.service.UserService;


//自定義的類必須繼承<span style="font-family: Arial, Helvetica, sans-serif;">AuthorizingRealm ,並重寫其方法</span>

public class MonitorRealm extends AuthorizingRealm {


	public MonitorRealm() {
		super();

	}

	//注入角色對應的service
	@Autowired
	private UserService userService;
	
<span style="white-space:pre">	</span><span style="font-family:Consolas, Bitstream Vera Sans Mono, Courier New, Courier, monospace;color:#808080;"><span style="font-size: 12.5px; line-height: 13.75px;">
</span></span>
	public void clearCachedAuthorizationInfo(String principal) {
		SimplePrincipalCollection principals = new SimplePrincipalCollection(
				principal, getName());
		
		clearCachedAuthorizationInfo(principals);
	}
<span style="white-space:pre">	</span><pre name="code" class="html"><span style="font-family:Consolas, Bitstream Vera Sans Mono, Courier New, Courier, monospace;color:#808080;"><span style="font-size: 12.5px; line-height: 13.75px;"><span style="white-space:pre">	</span>//</span></span><span style="font-size: 12.5px; line-height: 13.75px; color: rgb(128, 128, 128); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;">該方法的呼叫時機為需授權資源被訪問時執行 </span><span style="font-size: 12.5px; line-height: 13.75px; color: rgb(128, 128, 128); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;"> </span>
@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
<span style="white-space:pre">		</span>//獲取使用者名稱,在登入的Controller中加入SecurityUtils.getSubject().login(new UsernamePasswordToken(user.getUsername(), user.getPassword()));//就可以在此處使用<span style="font-family: Arial, Helvetica, sans-serif;">String currentUsername = (String)super.getAvailablePrincipal(principals);去獲取角色的使用者名稱</span>

		String currentUsername = (String)super.getAvailablePrincipal(principals);
<span style="white-space:pre">		</span>//訪問資料庫,查詢對應的角色
		 User user = userService.selectByName(currentUsername);
		 if(user !=null) {
<span style="white-space:pre">			</span> //分配許可權
			  SimpleAuthorizationInfo simpleAuthorInfo = new SimpleAuthorizationInfo();
			  simpleAuthorInfo.addRole(user.getRole());
			  simpleAuthorInfo.addStringPermission(user.getRole()); 
			  return simpleAuthorInfo;
		 }
		return null;
	}
<span style="white-space:pre">	</span>//<span style="color: rgb(128, 128, 128); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; font-size: 12.5px; line-height: 13.75px; white-space: pre;">LoginController.login()方法中執行Subject.login()時呼叫此方法</span>
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
		 UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
		return new SimpleAuthenticationInfo(token.getUsername(),
				token.getPassword(),getName());
	}

}
到這裡。shiro的配置就算完成了


相關推薦

springmvc配置shiro進行許可權控制

Shiro是一個強大易用的Java安全框架,提供了認證、授權、加密和會話管理等功能。本文將簡單介紹springmvc中如何配置shiro。 1.首先是maven中配置shiro所需要的jar包 <dependency><groupId>org.apa

shiro進行許可權控制的四種方式

我們使用shiro進行許可權控制 有以下幾種方式1.  URL攔截許可權控制:基於filter過濾器實現我們在spring配置檔案中配置shiroFilter時配置<!--指定URL級別攔截策略  --><property name="filterChain

Jfinal配合Shiro進行許可權控制

web專案總免不了使用者的管理與註冊,需求稍微再多一點兒,就涉及使用者的角色及許可權管理了,下面根據自己專案的實際經驗,介紹如何在Jfinal專案中使用Shiro來進行簡單的登陸及許可權管理。 主角簡介 Jfinal 位居開源中國年度熱門開源專案前列,簡單

shiro-springmvc-mybatis登入認證 許可權控制

最近閒的沒事研究了一下shiro,整合springmvc-mybatis-maven做了一個簡單的登入認證許可權控制: 1:shiro jar <dependency> <groupId>org.apache.shiro</groupI

spring boot整合shiro 簡單許可權控制

package me.config; import javax.annotation.Resource; import me.domain.entity.CmsUser; import me.service.UserService; import me.utils.MD5Util

Spring Boot 整合 Shiro實現許可權控制,親測可用,附帶sql

前提: 本文主要講解Spring Boot 與 Shiro的整合 與許可權控制的實現方式(主要以程式碼實現功能為主),主要用到的技術Spring Boot+Shiro+Jpa(通過Maven構建),並不會涉及到Shiro框架的原始碼分析 如果有想要學習Shiro框架的小夥伴可以去http://shiro.

Apache Shiro Web許可權控制(1)

Shiro官方文件:http://shiro.apache.org/web.html#Web-configuration ①建立一個maven web工程 ②新增依賴 <dependencies> <dependency> <groupId&g

國際物流雲商專案筆記005:shiro許可權控制

一、實現方式        有兩種方式,第一種是在的shiro的配置檔案(applicationContext-shiro.xml)中(即過濾器),第二種是通過註解 二、程式碼實現 1、配置檔案       在配置檔案的<property name="filte

Spring整合Shiro許可權控制模組詳細案例分析

1.引入Shiro的Maven依賴 <!-- Spring 整合Shiro需要的依賴 --> <dependency> <groupId>org.apache.shiro</groupId> <artifac

shiro(一) : 許可權控制介紹

許可權管理 只要有使用者參與的系統一般都要有許可權管理,許可權管理實現對使用者訪問系統的控制,按照安全規則或者安全策略控制使用者可以訪問而且只能訪問自己被授權的資源。 許可權管理包括使用者認證和授權兩部分。shiro也是基於此來進行設計實現的 使用者認證 使用者

Shiro——實現許可權控制demo思路(包含自定義標籤hasAnyPermission)

在很多系統中需要使用許可權控制,來控制不同角色的人訪問不同的資源。表達能力不好,不喜勿噴! 環境:eclipse4.5.2+oracle11g+hibernate4+spring4+shiro+jboss 原始碼(工程)+ 資料表sql(包含初始化資料)+hibernat

VisualSVN Server的配置和使用方法 圖文(在伺服器中使用配置 svn 進行 版本控制

一、VisualSVN Server的配置和使用方法【伺服器端】 安裝好VisualSVN Server後【安裝過程看這裡】,執行VisualSVN Server Manger,下面是啟動介面:   好的,下面我來新增一個程式碼庫【Repository】,如下圖:

【原創】基於SpringMVC的註解式許可權控制--轉載請註明出處

1. 開發目標 在Shiro的許可權分配中,存在@RequiresPermissions註解進行許可權的控制,該註解規定了所進行了註解的方法,只能被具有某些許可權的人進行訪問,且許可權之間為&的關係。這個許可權控制是不符合我們所需要的許可權控制需求的。(我們所需要的是具有某

springboot整合shiro 實現許可權控制

shiro apache shiro 是一個輕量級的身份驗證與授權框架,與spring security 相比較,簡單易用,靈活性高,springboot本身是提供了對security的支援,畢竟是自家的東西。springboot暫時沒有整合shiro,這得自

springboot2.0--結合spring security5.0進行許可權控制,從資料庫中取許可權資訊及增加驗證碼

  1.在pom.xml中增加spring security jar的引用:      <!--引入spring security--> <dependency> <groupId>org.springframework

修改struts2中UI標籤的進行許可權控制

最近在做學習S2SH時,有一個模組式許可權控制,就是對使用者的操作存在許可權分級操作,即不是所有的使用者都可以訪問全部資料。下面說一下這次我們的做法。    1.所謂許可權控制,就是對URL地址的控制,使用者角色中不存在該許可權,那麼該url地址對使用者是不起反應的(使用者

基於Kafka 0.9版本 使用ACL進行許可權控制

kafka附帶一個可插拔的認證,並使用zookeeper來儲存所有的acl。kafka的acl在一般格式定義"Principal P is [Allowed/Denied] Operation O From Host H On Resource R”,你可以閱讀更多關於KIP-11的結構,為了新增,刪除或列

guns shiro按鈕許可權控制

資料庫修改 relation(roleid) menu (url) “/case/overview” 原有mapper <select id="getResUrlsByRoleId" resultType="string">

IDEA整合Maven工具使用shiro進行許可權管理

第一步:匯入jar包<!--shiro許可權控制器--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core

Springmvc整合Shiro實現許可權管理

package com.authc.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Rand