大家都知道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 + "/";
}

  通过以上方法就实现了根据用户角色登录后跳转到不能的页面的效果。

spring登录验证拦截器和根据用户角色登录的更多相关文章

  1. SpringMVC拦截器(实现登录验证拦截器)

    本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 <%@ ...

  2. struts2学习(6)自定义拦截器-登录验证拦截器

    需求:对登录进行验证,用户名cy 密码123456才能登录进去:  登录进去后,将用户存在session中: 其他链接要来访问(除了登录链接),首先验证是否登录,对这个进行拦截: com.cy.mod ...

  3. Spring Boot2.0拦截器简单实现判断是否登录

    在进行项目开发的时候使用springboot框架用到拦截器时发现2.0以后原来的抽象类WebMvcConfigurerAdapter已经过时了,去官网查文档2.x版本要实现拦截器功能改为需要继承Web ...

  4. taotao用户登录springMVC拦截器的实现

    在springMVC中写拦截器,只需要两步: 一.写 java 拦截器类,实现 interceptor 拦截器接口. 二.在 springMVC 的xml配置文件中,配置我们创建的拦截器对象及其拦截目 ...

  5. Struts2重新学习之自定义拦截器(判断用户是否是登录状态)

    拦截器 一:1:概念:Interceptor拦截器类似于我们学习过的过滤器,是可以再action执行前后执行的代码.是web开发时,常用的技术.比如,权限控制,日志记录. 2:多个拦截器Interce ...

  6. Spring MVC - 拦截器实现 和 用户登陆例子

    1.拦截器 SpringMvc中的拦截器实现了HandlerInterceptor接口,通常使用与身份认证,授权和校验,模板视图,统一处理等: public class HanderIntercept ...

  7. [转载] Spring MVC - 处理器拦截器

    5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   ...

  8. Spring Mvc session拦截器实现

    Spring Mvc拦截器实现session过期跳转到登录页面 配置拦截器 <mvc:interceptors> <mvc:interceptor> <mvc:mappi ...

  9. spring mvc +cookie+拦截器功能 实现系统自动登陆

    先看看我遇到的问题: @ResponseBody @RequestMapping("/logout") public Json logout(HttpSession session ...

随机推荐

  1. 如何在word文档中添加mathtype加载项

    MathType是强大的数学公式编辑器,通常与office一起使用,mathtype安装完成后,正常情况下会在word文档中的菜单中自动添加mathtype加载项,但有时也会出现小意外,mathtyp ...

  2. 在VS中安装/使用 MVVMLight

    一般来说,我喜欢使用NuGet来获取这些东西,比如Newtonsoft.Json.netlog4.MVVMLight 之类的东西.至于NuGet的使用,以后再说吧.为了直接进入正题,我们这里直接使用V ...

  3. Java精选笔记_多线程(创建、生命周期及状态转换、调度、同步、通信)

    线程概述 在应用程序中,不同的程序块是可以同时运行的,这种多个程序块同时运行的现象被称作并发执行. 多线程可以使程序在同一时间内完成很多操作. 多线程就是指一个应用程序中有多条并发执行的线索,每条线索 ...

  4. Android 多状态按钮ToggleButton

    1.什么是ToggleButtonToggleButton有两种状态:选中和未选中状态并且需要为不同的状态设置不同的显示文本2.ToggleButton属性android:checked=" ...

  5. mount: block device /dev/cdrom is write-protected, mounting read-only 解决方法

    [root@localhost ~]# mount /dev/cdrom /mnt/cdrom/ mount: block device /dev/sr0 is write-protected, mo ...

  6. 微信公众号支付JSAPI,提示:2支付缺少参数:appId

    因为demo中支付金额是定死的,所以需要调整. 所以在使用的JS上添加了参数传入.这里的传入string类型的参数,直接使用是错误的,对于方法,会出现appid缺少参数的错误 //调用微信JS api ...

  7. 使用synchronized(非this对象)同步代码块解决脏读问题

    首先通过示例来学习验证多个线程调用同一个方法时随机的. package syn_out_asyn; import java.util.ArrayList; import java.util.List; ...

  8. 代码片段,Lucene的高亮显示

    代码高亮显示是通过在搜索到的Term中把匹配了用户输入的关键字的周围加上一些标记来实现(比如,关键字是 "中华" 查到的一个Term是 "中华人民共和国",则把 ...

  9. Egret5.2.2 微信小游戏行的示例排行榜

    Egret5.2.2版本发布微信小游戏后,在开放数据域有一个默认排行榜.这个文件夹代码+图大小就22kb. 排行榜的效果就是示范用的,很丑...带翻页. 代码如下,基本就是使用canvas渲染了一个排 ...

  10. JSP 通过Session和Cookie实现网站自动登录

    点记住密码 login.jsp String host = request.getServerName(); Cookie cookie = new Cookie("SESSION_LOGI ...