-
如何使用Shiro实现不同用户登录成功后跳转到不同主页?10
Shiro配置文件中successUrl指定的页面只有一个:
- <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
- <property name="securityManager" ref="securityManager"/>
- <property name="loginUrl" value="/login"/>
- <property name="successUrl" value="/main"/>
- <property name="unauthorizedUrl" value="/login"/>
- ...
- </bean>
有的用户登录成功后要跳转到别的页面,怎么实现?2012年9月11日 11:48src="http://www.iteye.com/iframe_ggbd/186" scrolling="no" width="468" height="60" frameborder="0">
4个答案按时间排序按投票排序
-
登陆成功后获取 Subject 对象.
然后通过 Subject 对象来判断当前用户的角色/权限, 之后执行不同的跳转(直接在LoginAction中做).
我的登陆部分代码:- UsernamePasswordToken token = new UsernamePasswordToken(name, password);
- try {
- SecurityUtils.getSubject().login(token);
- Subject subject = SecurityUtils.getSubject();
- // 这里可以调用subject 做判断
- System.out.println("--------------------------------------------------------------");
- Boolean isadmin = subject.hasRole("admin");
- log.info("是否为管理员:"+isadmin);
- System.out.println("--------------------------------------------------------------");
- String userId = (String)subject.getPrincipal();
- User user = userService.getById(userId);
- ShiroUser shiroUser = shiroUserService.getByDyId(userId);
- if(shiroUser == null){
- this.addActionError(getText("login.failure"));
- return ERROR;
- }else{
- int used = shiroUser.getUsed();
- if(used == 1){
- this.addActionError(getText("login.noused"));
- return ERROR;
- }
- }
- Session session = subject.getSession(true);
- session.setAttribute(LoginAction.USER_KEY, user);
- session.setAttribute(LoginAction.SHIRO_USER_KEY, shiroUser);
- log.info("set workflow define to session");
- session.setAttribute("ptDefine", WorkflowContext.getPtDefine());
- } catch (AuthenticationException e) {
- log.info(e.getMessage());
- this.addActionError(getText("login.failure"));
- }
- if (this.hasErrors()) {
- log.info("login erro ...");
- return ERROR;
- }
配置, 登陆跳转基本没用到, 注意 filterChainDefinitions,
- <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
- <property name="securityManager" ref="securityManager"/>
- <!-- override these for application-specific URLs if you like: -->
- <property name="loginUrl" value="/index.jsp"/>
- <property name="successUrl" value="/home.jsp"/>
- <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
- <!-- The 'filters' property is not necessary since any declared javax.servlet.Filter bean -->
- <!-- defined will be automatically acquired and available via its beanName in chain -->
- <!-- definitions, but you can perform instance overrides or name aliases here if you like: -->
- <!-- -->
- <property name="filters">
- <map>
- <entry key="authc">
- <bean class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter"/>
- </entry>
- </map>
- </property>
- <property name="filterChainDefinitions">
- <value>
- # static file chains
- /js/* = anon
- /css/* = anon
- /img/* = anon
- /images/* = anon
- /applets/* = anon
- # login/logout chain
- /login.action = anon
- # some example chain definitions:
- #/admin/** = authc, roles[ptAdmin]
- /docs/** = authc, perms[document:read]
- /** = user
- # more URL-to-FilterChain definitions here
- </value>
- </property>
- </bean>
2012年9月11日 15:19
-
如何使用Shiro实现不同用户登录成功后跳转到不同主页?10
Shiro配置文件中successUrl指定的页面只有一个:
- <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
- <property name="securityManager" ref="securityManager"/>
- <property name="loginUrl" value="/login"/>
- <property name="successUrl" value="/main"/>
- <property name="unauthorizedUrl" value="/login"/>
- ...
- </bean>
有的用户登录成功后要跳转到别的页面,怎么实现?2012年9月11日 11:48src="http://www.iteye.com/iframe_ggbd/186" scrolling="no" width="468" height="60" frameborder="0">
4个答案按时间排序按投票排序
-
登陆成功后获取 Subject 对象.
然后通过 Subject 对象来判断当前用户的角色/权限, 之后执行不同的跳转(直接在LoginAction中做).
我的登陆部分代码:
- UsernamePasswordToken token = new UsernamePasswordToken(name, password);
- try {
- SecurityUtils.getSubject().login(token);
- Subject subject = SecurityUtils.getSubject();
- // 这里可以调用subject 做判断
- System.out.println("--------------------------------------------------------------");
- Boolean isadmin = subject.hasRole("admin");
- log.info("是否为管理员:"+isadmin);
- System.out.println("--------------------------------------------------------------");
- String userId = (String)subject.getPrincipal();
- User user = userService.getById(userId);
- ShiroUser shiroUser = shiroUserService.getByDyId(userId);
- if(shiroUser == null){
- this.addActionError(getText("login.failure"));
- return ERROR;
- }else{
- int used = shiroUser.getUsed();
- if(used == 1){
- this.addActionError(getText("login.noused"));
- return ERROR;
- }
- }
- Session session = subject.getSession(true);
- session.setAttribute(LoginAction.USER_KEY, user);
- session.setAttribute(LoginAction.SHIRO_USER_KEY, shiroUser);
- log.info("set workflow define to session");
- session.setAttribute("ptDefine", WorkflowContext.getPtDefine());
- } catch (AuthenticationException e) {
- log.info(e.getMessage());
- this.addActionError(getText("login.failure"));
- }
- if (this.hasErrors()) {
- log.info("login erro ...");
- return ERROR;
- }
配置, 登陆跳转基本没用到, 注意 filterChainDefinitions,
- <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
- <property name="securityManager" ref="securityManager"/>
- <!-- override these for application-specific URLs if you like: -->
- <property name="loginUrl" value="/index.jsp"/>
- <property name="successUrl" value="/home.jsp"/>
- <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
- <!-- The 'filters' property is not necessary since any declared javax.servlet.Filter bean -->
- <!-- defined will be automatically acquired and available via its beanName in chain -->
- <!-- definitions, but you can perform instance overrides or name aliases here if you like: -->
- <!-- -->
- <property name="filters">
- <map>
- <entry key="authc">
- <bean class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter"/>
- </entry>
- </map>
- </property>
- <property name="filterChainDefinitions">
- <value>
- # static file chains
- /js/* = anon
- /css/* = anon
- /img/* = anon
- /images/* = anon
- /applets/* = anon
- # login/logout chain
- /login.action = anon
- # some example chain definitions:
- #/admin/** = authc, roles[ptAdmin]
- /docs/** = authc, perms[document:read]
- /** = user
- # more URL-to-FilterChain definitions here
- </value>
- </property>
- </bean>
2012年9月11日 15:19