zoukankan      html  css  js  c++  java
  • shiro登录实现自定义路径跳转

    一、实现需求

        登录框架采用shiro,需根据不同客户端类型实现相对应定义页面跳转。

    二、登录页jsp表单

        <div class="input-prepend" title="Username" data-rel="tooltip">
        <span class="add-on"><i class="icon-user"></i></span>    <input type="text" id="username" name="username"  value="${username}" class="input-medium required"/>
        </div>
        <div class="clearfix"></div>
    
        <div class="input-prepend" title="Password" data-rel="tooltip">
        <span class="add-on"><i class="icon-lock"></i></span><input type="password" id="password" name="password" class="input-medium required"/>
        </div>
        <div class="clearfix"></div>
    
        <div><input type="hidden" id="clienttype" name="clienttype" value="pc"/></div>
                                
        <div class="input-prepend">
        <label class="checkbox" for="rememberMe"><input type="checkbox" id="rememberMe" name="rememberMe"/> 记住我<a  href="${ctx}/register">注册</a></label>
        </div>
        <div class="clearfix"></div>
    
        <p class="center span5">
        <button type="submit" class="btn btn-primary">登录</button>
        </p>

    三、自定义过滤器类

        创建自定义过滤器LoginFormAuthenticationFilter,继承FormAuthenticationFilter。然后通过重写onLoginSuccess方法与WebUtils工具类,实现自定义跳转。

     

     1 public class LoginFormAuthenticationFilter extends FormAuthenticationFilter {
     2 
     3     private static Logger logger = LoggerFactory.getLogger(LoginFormAuthenticationFilter.class);
     4     
     5     @Override
     6     protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request,
     7             ServletResponse response) throws Exception {
     8         
     9         ShiroUser user = (ShiroUser) SecurityUtils.getSubject().getPrincipal();
    10         
    11         if(user != null) {
    12             HttpServletRequest req = (HttpServletRequest) request;
    13             String clientType = (String) req.getParameter("clienttype");
    14             logger.debug("[LOGIN]login success(user:" + user.loginName + ", client:" + clientType + ")");
    15             if("pc".equals(clientType)) { // 请求方为pc,执行原方法
    16                 return super.onLoginSuccess(token, subject, request, response);
    17             } else { // 其他,根据类型跳转指定页面
    18                 WebUtils.getAndClearSavedRequest(request); // 清除登录前请求路径
    19                 String fallbackUrl = null;
    20                 fallbackUrl = "/static/" + clientType + ".jsp"; // 自定义跳转界面
    21                 WebUtils.redirectToSavedRequest(request, response, fallbackUrl);
    22             }
    23         }
    24         return false;
    25     }
    26 }

    四、修改shiro配置文件

        在applicationContext-shiro.xml中配置自定义过滤器。

        首先,修改beans元素属性;

        xmlns:util=http://www.springframework.org/schema/util

        xsi:schemaLocation:

        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd

        其次,修改shiroFilter内容,添加自定义过滤器属性。

     1     <!-- 请求分发过滤器 -->
     2     <bean id="loginDispacher" class="cn.com.mcfly.web.filter.LoginFormAuthenticationFilter"/>
     3     <!-- Shiro Filter -->
     4     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
     5         <property name="securityManager" ref="securityManager" />
     6         <property name="loginUrl" value="/login" />
     7         <property name="filters">
     8             <util:map>
     9                 <entry key="authc" value-ref="loginDispacher"/>
    10             </util:map>
    11         </property>
    12         <!--<property name="successUrl" value="/" />-->
    13         <property name="filterChainDefinitions">
    14             <value>
    15                 /static/** = anon
    16                 /login = authc
    17                 /logout = logout
    18                 ...
    19                 /** = user
    20             </value>
    21         </property>
    22     </bean>
  • 相关阅读:
    C# 规格说明书
    C#学习笔记----复习笔记
    C#学习笔记-stream,win8.1开发小记
    C#学习笔记-Win8.1 store app winform开发小记
    C#学习笔记:linq和xml
    C#第六周--关于正则表达式应用,delegates关键字
    C#第六课---struct,interface
    C#第五课--继承和多态
    开发了一款小程序
    「CSS Warning 2」icon 的做法
  • 原文地址:https://www.cnblogs.com/fantastic-clouds/p/8028584.html
Copyright © 2011-2022 走看看