知识点
相关文章
更多最近更新
更多spring登录验证拦截器和根据用户角色登录
2019-03-02 01:00|来源: 网路
大家都知道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 + "/"; }
通过以上方法就实现了根据用户角色登录后跳转到不能的页面的效果。
转自:http://www.cnblogs.com/liughost/p/3807676
相关问答
更多-
用基于注解的spring3 mvc 拦截器想弄个当用户没登陆的时候,他访问的URL跳转到登录页面[2023-11-01]
自己实现HandlerInterceptor接口的一个类,在preHandle方法里判断,跳转 -
spring MVC拦截器,拦截日志怎么写[2022-12-18]
(1) 在com.geloin.spring.interceptor包中添加SystemInterceptor 并使其继承HandlerInterceptor (2) 修改context-dispatcher.xml,让spring管理拦截器 -
判断用户登录是用springmvc 拦截器还是filter[2022-09-26]
最好使用spring拦截器。 1、web.xml设置session有效时间 默认好像20min 2、登录成功后把登录信息放入session 3、定义拦截器 拦截请求 ,从session中获取登录信息 无则做响应跳转 如登录 123456public class XxxInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServlet ... -
用基于注解的spring3 mvc 拦截器想弄个当用户没登陆的时候,他访问的URL跳转到登录页面[2022-01-28]
-
Spring MVC 拦截器问题,如何配置不需要拦截的页面[2021-10-27]
我估计是想想用拦截器做权限验证,login和main不需要验证吧。 我的方法是,定义一个@Auth,可以加些自定义的属性,比如访问这个方法所需要的权限。@Auth加在需要验证的controller方法上。 然后定义个AuthorizationInterceptor,实现 HandlerInterceptor接口中的preHandle方法,该方法中有个handler参数,对于一般的请求,该参数是HandlerMethod类型,可以从中获取到controller方法上的annotation,如果有@Auth则验 ... -
spring mvc中的登录拦截器java类中,重写的三个方法是什么意思[2023-09-26]
preHandle在业务处理器处理请求之前被调用, postHandle在业务处理器处理请求执行完成后,生成视图之前执行, afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 。 所以要想实现自己的拦截管理逻辑,需要继承HandlerInterceptorAdapter并重写其三个方法。 原文地址:http://blog.csdn.net/fullbug/article/details/53115458 -
spring AOP 拦截器实现问题[2022-03-25]
创建拦截类: @Aspect public class MyAspect{ /** 执行前拦截 */ @Before("execution(* t.t..service.*Service.*(..))") public void before(JoinPoint point) throws Throwable { System.out.println("执行方法:" + point.getSignature().getDeclaringTypeName() + "." + point.getSignatur ... -
在Spring MVC中结合了拦截器验证和控制器验证(Combine interceptor validation and controller validation in Spring MVC)[2022-09-23]
我会通过请求属性将验证错误从拦截器传递给控制器: public class FooInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { request.setAttribute( ... -
Spring参考文章有一整章关于Spring AOP,它是一个非常详细的指南,可以帮助您完成所需的工作。 试试看,如果你有更具体的问题,请问。 The Spring reference has a whole chapter on Spring AOP that serves as a very detailed guide for doing what you're looking for. Try that, and if you have some more specific questions, a ...
-
在spring中使用缓存和拦截器进行登录/注销实现(login/ logout implementation using cache and interceptor in spring)[2022-07-23]
当用户登录 - >使用DB进行身份验证并且所有凭据都正确时,然后使用密钥将用户对象存储在缓存中,并将密钥存储在请求对象中。 从下一个请求获取HandlerInterceptorAdapter的preHandle()方法中的请求对象的密钥,并检查缓存(如果存在),或重定向到登录页面。 在postHandle()中再次将令牌设置回客户端。 将令牌保存在公共jsp中,因此可以附加所有请求。 实施方法是什么,请建议...... / when user login -> authenticate with DB an ...