你們都知道spring的用戶登陸攔截器,確實省去了程序員很多的精力,下面說說我在項目中使用的感覺。java
德安微信管理後臺是管理多個微信賬號的平臺,登陸到平臺的用戶有三個角色,遊客和微信賬號管理員、超級管理員。超級管理員負責創建新的微信賬號、創建新的微信賬號管理員;微信賬號管理員負責維護微信菜單;微信圖文消息;處理微信事件,發佈產品介紹專題等;遊客的功能有瀏覽、下單、手機號綁定等。基於此咱們分配了三個用戶角色:ROLE_TRAVELER、ROLE_ADMIN、ROLE_SUPER分別對應遊客、微信賬號管理員和超級管理員,每種角色登陸後訪問不一樣的首頁。程序員
首先在security.xml文件裏增長:spring
<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請求中獲取用戶角色,根據用戶橘色在跳轉到不一樣的首頁,固然每類用戶角色會有不一樣的模板區分,以保證用戶功能和菜單不一致。express
@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 + "/"; }
經過以上方法就實現了根據用戶角色登陸後跳轉到不能的頁面的效果。微信