spring登錄驗證攔截器和根據用戶角色登錄


大家都知道spring的用戶登錄攔截器,確實省去了程序員不少的精力,下面說說我在項目中使用的感受。

德安微信管理后台是管理多個微信帳號的平台,登錄到平台的用戶有三個角色,游客和微信帳號管理員、超級管理員。超級管理員負責建立新的微信帳號、建立新的微信帳號管理員;微信帳號管理員負責維護微信菜單;微信圖文消息;處理微信事件,發布產品介紹專題等;游客的功能有瀏覽、下單、手機號綁定等。基於此我們分配了三個用戶角色:ROLE_TRAVELER、ROLE_ADMIN、ROLE_SUPER分別對應游客、微信帳號管理員和超級管理員,每種角色登錄后訪問不同的首頁。

首先在security.xml文件里增加:

<http auto-config="true" use-expressions="true">
		<form-login login-page="/login" login-processing-url="/static/j_spring_security_check"
			authentication-failure-url="/login" default-target-url="/admin/home" />
		<logout logout-url="/static/j_spring_security_logout" />
		<intercept-url pattern="/*/my/**" access="hasRole('ROLE_TRAVELER')" />
		<intercept-url pattern="/admin/home" access="hasAnyRole('ROLE_SUPER,ROLE_ADMIN')" />
		<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
		<intercept-url pattern="/super/**" access="hasRole('ROLE_SUPER')" />
		<intercept-url pattern="/menu/**" access="hasRole('ROLE_ADMIN')" />
		<intercept-url pattern="/event/**" access="hasRole('ROLE_ADMIN')" />
		<intercept-url pattern="/special/**" access="hasRole('ROLE_ADMIN')" />
		<intercept-url pattern="/media/**" access="hasRole('ROLE_ADMIN')" />
		<remember-me key="travelerKey" token-validity-seconds="2419200" />

	</http>

  注意<intercept-url pattern="/admin/home" access="hasAnyRole('ROLE_SUPER,ROLE_ADMIN')" />的access的值使用了hasAnyRole,配置了兩個用戶角色,另外登錄后的默認首頁都是 default-target-url="/admin/home"指向的“admin/home”,這樣管理員和超級管理員用戶登錄后spring都會跳轉到admin/home,在admin/home請求中獲取用戶角色,根據用戶橘色在跳轉到不同的首頁,當然每類用戶角色會有不同的模板區分,以保證用戶功能和菜單不一致。

@RequestMapping("/home")
	public String adminPage() {
  //獲取用戶角色
	Set<String> roles = AuthorityUtils
		.authorityListToSet(SecurityContextHolder.getContext()
		.getAuthentication().getAuthorities());
  //根據用戶角色跳轉到不同的頁面
  if (roles.contains("ROLE_ADMIN")) {
	return this.REDIRECT + "/special/list";
  } else if (roles.contains("ROLE_SUPER")) {
	return this.REDIRECT + "/super/home";
  }
		return this.REDIRECT + "/";
	}

  通過以上方法就實現了根據用戶角色登錄后跳轉到不能的頁面的效果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM