入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

如何使用Shiro实现不同用户登录成功后跳转到不同主页?

创建时间:2015-09-05 投稿人: 浏览次数:5301


0

如何使用Shiro实现不同用户登录成功后跳转到不同主页?10

Shiro配置文件中successUrl指定的页面只有一个: 
Java代码  收藏代码
  1. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  2.         <property name="securityManager" ref="securityManager"/>  
  3.         <property name="loginUrl" value="/login"/>  
  4.         <property name="successUrl" value="/main"/>  
  5.         <property name="unauthorizedUrl" value="/login"/>  
  6.         ...  
  7.     </bean>  

有的用户登录成功后要跳转到别的页面,怎么实现? shiro  2012年9月11日 11:48 cwx714 

0 0 5
  • Comment添加评论
  • 关注(0)

4个答案按时间排序按投票排序

00

在success页面进行判断,不同的情况下重定向到不同页面 
sendredirect

2012年9月26日 14:11hz020815 
93 
0 0 7
  • Comment添加评论
00

登陆成功后获取 Subject 对象. 
然后通过 Subject 对象来判断当前用户的角色/权限, 之后执行不同的跳转(直接在LoginAction中做). 

我的登陆部分代码: 

Java代码  收藏代码
  1. UsernamePasswordToken token = new UsernamePasswordToken(name, password);  
  2.   
  3. try {  
  4.     SecurityUtils.getSubject().login(token);  
  5.       
  6.     Subject subject = SecurityUtils.getSubject();  
  7.                       // 这里可以调用subject 做判断  
  8.   
  9.     System.out.println("--------------------------------------------------------------");  
  10.     Boolean isadmin = subject.hasRole("admin");  
  11.     log.info("是否为管理员:"+isadmin);  
  12.     System.out.println("--------------------------------------------------------------");  
  13.       
  14.     String userId = (String)subject.getPrincipal();  
  15.     User user = userService.getById(userId);  
  16.     ShiroUser shiroUser = shiroUserService.getByDyId(userId);  
  17.                
  18.     if(shiroUser == null){  
  19.         this.addActionError(getText("login.failure"));  
  20.         return ERROR;  
  21.     }else{  
  22.         int used = shiroUser.getUsed();  
  23.         if(used == 1){  
  24.             this.addActionError(getText("login.noused"));  
  25.             return ERROR;  
  26.         }  
  27.     }  
  28.       
  29.       
  30.     Session session = subject.getSession(true);  
  31.     session.setAttribute(LoginAction.USER_KEY, user);  
  32.     session.setAttribute(LoginAction.SHIRO_USER_KEY, shiroUser);  
  33.       
  34.     log.info("set workflow define to session");  
  35.     session.setAttribute("ptDefine", WorkflowContext.getPtDefine());  
  36.       
  37. } catch (AuthenticationException e) {  
  38.     log.info(e.getMessage());  
  39.     this.addActionError(getText("login.failure"));  
  40. }  
  41.   
  42. if (this.hasErrors()) {  
  43.     log.info("login erro ...");  
  44.     return ERROR;  
  45. }  



配置, 登陆跳转基本没用到, 注意 filterChainDefinitions, 
Java代码  收藏代码
  1. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  2.     <property name="securityManager" ref="securityManager"/>  
  3.     <!-- override these for application-specific URLs if you like: -->  
  4.     <property name="loginUrl" value="/index.jsp"/>  
  5.     <property name="successUrl" value="/home.jsp"/>  
  6.     <property name="unauthorizedUrl" value="/unauthorized.jsp"/>   
  7.     <!-- The "filters" property is not necessary since any declared javax.servlet.Filter bean  -->  
  8.     <!-- defined will be automatically acquired and available via its beanName in chain        -->  
  9.     <!-- definitions, but you can perform instance overrides or name aliases here if you like: -->  
  10.     <!-- -->  
  11.     <property name="filters">  
  12.         <map>  
  13.             <entry key="authc">  
  14.                    <bean class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter"/>  
  15.                </entry>  
  16.         </map>  
  17.     </property>   
  18.     <property name="filterChainDefinitions">  
  19.         <value>           
  20.             # static file chains  
  21.             /js/* = anon  
  22.             /css/* = anon  
  23.             /img/* = anon  
  24.             /images/* = anon  
  25.             /applets/* = anon  
  26.               
  27.             # login/logout chain  
  28.             /login.action = anon  
  29.               
  30.             # some example chain definitions:  
  31.             #/admin/** = authc, roles[ptAdmin]  
  32.             /docs/** = authc, perms[document:read]  
  33.               
  34.             /** = user  
  35.             # more URL-to-FilterChain definitions here  
  36.         </value>  
  37.     </property>  
  38. </bean>  

2012年9月11日 15:19witcheryne 
99 
0 1 14
  • Comment添加评论
00

1.力推 Filter 过滤器, 
2.后台判断根据权限跳转页面 

2012年9月11日 12:38demojava 
2207 
1 3 134
  • Comment添加评论
00

最简单的办法到success页面进行判断,然后不同的用户再重定向到不同的页面。

2012年9月11日 12:19jinnianshilongnian 
7280 
2 3 591
0

如何使用Shiro实现不同用户登录成功后跳转到不同主页?10

Shiro配置文件中successUrl指定的页面只有一个: 
Java代码  收藏代码
  1. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  2.         <property name="securityManager" ref="securityManager"/>  
  3.         <property name="loginUrl" value="/login"/>  
  4.         <property name="successUrl" value="/main"/>  
  5.         <property name="unauthorizedUrl" value="/login"/>  
  6.         ...  
  7.     </bean>  

有的用户登录成功后要跳转到别的页面,怎么实现?shiro 2012年9月11日 11:48cwx714 

0 0 5
  • Comment添加评论
  • 关注(0)

4个答案按时间排序按投票排序

00

在success页面进行判断,不同的情况下重定向到不同页面 
sendredirect

2012年9月26日 14:11 hz020815 
93 
0 0 7
  • Comment添加评论
00

登陆成功后获取 Subject 对象. 
然后通过 Subject 对象来判断当前用户的角色/权限, 之后执行不同的跳转(直接在LoginAction中做). 

我的登陆部分代码: 

Java代码  收藏代码
  1. UsernamePasswordToken token = new UsernamePasswordToken(name, password);  
  2.   
  3. try {  
  4.     SecurityUtils.getSubject().login(token);  
  5.       
  6.     Subject subject = SecurityUtils.getSubject();  
  7.                       // 这里可以调用subject 做判断  
  8.   
  9.     System.out.println("--------------------------------------------------------------");  
  10.     Boolean isadmin = subject.hasRole("admin");  
  11.     log.info("是否为管理员:"+isadmin);  
  12.     System.out.println("--------------------------------------------------------------");  
  13.       
  14.     String userId = (String)subject.getPrincipal();  
  15.     User user = userService.getById(userId);  
  16.     ShiroUser shiroUser = shiroUserService.getByDyId(userId);  
  17.                
  18.     if(shiroUser == null){  
  19.         this.addActionError(getText("login.failure"));  
  20.         return ERROR;  
  21.     }else{  
  22.         int used = shiroUser.getUsed();  
  23.         if(used == 1){  
  24.             this.addActionError(getText("login.noused"));  
  25.             return ERROR;  
  26.         }  
  27.     }  
  28.       
  29.       
  30.     Session session = subject.getSession(true);  
  31.     session.setAttribute(LoginAction.USER_KEY, user);  
  32.     session.setAttribute(LoginAction.SHIRO_USER_KEY, shiroUser);  
  33.       
  34.     log.info("set workflow define to session");  
  35.     session.setAttribute("ptDefine", WorkflowContext.getPtDefine());  
  36.       
  37. } catch (AuthenticationException e) {  
  38.     log.info(e.getMessage());  
  39.     this.addActionError(getText("login.failure"));  
  40. }  
  41.   
  42. if (this.hasErrors()) {  
  43.     log.info("login erro ...");  
  44.     return ERROR;  
  45. }  



配置, 登陆跳转基本没用到, 注意 filterChainDefinitions, 
Java代码  收藏代码
  1. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  2.     <property name="securityManager" ref="securityManager"/>  
  3.     <!-- override these for application-specific URLs if you like: -->  
  4.     <property name="loginUrl" value="/index.jsp"/>  
  5.     <property name="successUrl" value="/home.jsp"/>  
  6.     <property name="unauthorizedUrl" value="/unauthorized.jsp"/>   
  7.     <!-- The "filters" property is not necessary since any declared javax.servlet.Filter bean  -->  
  8.     <!-- defined will be automatically acquired and available via its beanName in chain        -->  
  9.     <!-- definitions, but you can perform instance overrides or name aliases here if you like: -->  
  10.     <!-- -->  
  11.     <property name="filters">  
  12.         <map>  
  13.             <entry key="authc">  
  14.                    <bean class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter"/>  
  15.                </entry>  
  16.         </map>  
  17.     </property>   
  18.     <property name="filterChainDefinitions">  
  19.         <value>           
  20.             # static file chains  
  21.             /js/* = anon  
  22.             /css/* = anon  
  23.             /img/* = anon  
  24.             /images/* = anon  
  25.             /applets/* = anon  
  26.               
  27.             # login/logout chain  
  28.             /login.action = anon  
  29.               
  30.             # some example chain definitions:  
  31.             #/admin/** = authc, roles[ptAdmin]  
  32.             /docs/** = authc, perms[document:read]  
  33.               
  34.             /** = user  
  35.             # more URL-to-FilterChain definitions here  
  36.         </value>  
  37.     </property>  
  38. </bean>  

2012年9月11日 15:19 witcheryne 
99 
0 1 14
  • Comment添加评论
00

1.力推 Filter 过滤器, 
2.后台判断根据权限跳转页面 

2012年9月11日 12:38 demojava 
2207 
1 3 134
  • Comment添加评论
00

最简单的办法到success页面进行判断,然后不同的用户再重定向到不同的页面。

2012年9月11日 12:19 jinnianshilongnian 
7280 
2 3 591
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。