你们都知道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 + "/"; }
经过以上方法就实现了根据用户角色登陆后跳转到不能的页面的效果。微信