大家都知道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. 生成验证码程序C#

    using System; using System.Data; using System.Configuration; using System.Collections; using System. ...

  2. error MSB8031

    http://go.microsoft.com/fwlink/p/?LinkId=286820 下载

  3. mysql中参数--init-file的作用是什么呢?

    需求描述: 今天在修改测试环境mysql数据库中root用户密码的时候,用到了--init-file参数, 所以,就在这里说下该参数的作用. 概念解释: 参数:--init-file=file_nam ...

  4. go-study

    package (包) 一个目录下面所有的.go文件的包名必须相同. 包名一般和目录名相同(是约定, 不是强制), 包名都小写 main包是一个特殊的包名, 在main包中, 必须包含func mai ...

  5. ASP.Net MVC开发基础学习笔记(7):数据查询页面

     前言 前面铺垫了那么多,今天我们就用MVC5 + EF6 + Bootstrap3来正式创建一个基本查询页面. 为什么从查询页面開始?嘿嘿.由于小弟的.Net生涯就是从查询页面開始的,记得正式工 ...

  6. 从头认识java-16.5 nio的数据转换

    这一章节我们来讨论一些nio的数据转换. 上面一章节我们提到ByteBuffer,可是他是面向二进制数据,对于编程来说不是非常方便,因此,java添加了转换数据的工具. 1.asCharBuffer ...

  7. Windows10下安装python(配置环境变量)

    从官网下载Windows下的python版本,一路按照默认进行安装. 安装之后配置环境变量的步骤如下: 1,点“我的电脑”,右键选“属性”. 2,选择“高级系统设置”--->选“环境变量”--- ...

  8. AssetBundle 在Android机子上进行读取 .

    http://game.ceeger.com/Manual/StreamingAssets.html 我看到官方文档中说明:Note that bundles are not fully compat ...

  9. 15个常用GCC命令

    GCC编译器非常强大 ,在各个发行的Linux系统中都非常流行,本文介绍的是一些常用的gcc编译选项 下面这段代码将回围绕整个文章: 编辑main.c如下. #include<stdio.h&g ...

  10. poj_1182 并查集

    题目大意 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A.现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人 ...