zoukankan      html  css  js  c++  java
  • Spring Security登陆

      本文参考或摘录自:http://haohaoxuexi.iteye.com/blog/2154714

      在上一篇中使用Spring Security做了一些安全控制,如Spring Security 自动生成登陆页面登陆以后便能正常使用系统。本文介绍Spring Security 自定义登陆页面以及相关的一些处理。

      Spring Security 之form-login。

     1、使用form-login 自定义登陆页

       2、使用form-login做登陆引导处理,即登陆成功后定向到其他页面

       3、使用form-login 登陆失败后处理

    一、form-login 介绍:

      form-login元素是用来定义表单登录信息,以及登陆后续处理。配置如下:

      

    <security:http>
            <!--http元素下的form-login元素用来定义表单登录信息.login-page指定用户指定的登录页-->
            <!--  username-parameter:表示登录时用户名使用的是哪个参数,默认是“j_username”。
     password-parameter:表示登录时密码使用的是哪个参数,默认是“j_password”。
       login-processing-url:表示登录时提交的地址,默认是“/j-spring-security-check”。这个只是Spring Security用来标记登录页面使用的提交地址,真正关于登录这个请求是不需要用户自己处理的。-->
             <security:form-login login-page="/login.jsp"
                                  login-processing-url="/login.do"
                                  username-parameter="username"
                                  password-parameter="password"
                                  authentication-success-handler-ref="authSuccess"  --用作登陆成功后的处理bean
     /> <!-- IS_AUTHENTICATED_ANONYMOUSLY 表示匿名用户可以访问,与ROLE_ANONYMOUS效果相同 --> <security:intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/> <security:intercept-url pattern="/**" access="ROLE_USER"/> </security:http>

    注:<security:http security="none" pattern="/login.jsp"></security:http> 为不进行安全认证的页面。因此以上配置与以下等效:

    <security:http security="none" pattern="/login.jsp"></security:http>
        <!--http元素用于定义Web相关权限控制。-->
        <!--intercept-url定义了一个权限控制的规则。
        pattern属性表示我们将对哪些url进行权限控制,其也可以是一个正则表达式,如上的写法表示我们将对所有的URL进行权限控制;
        access属性表示在请求对应的URL时需要什么权限,默认配置时它应该是一个以逗号分隔的角色列表,请求的用户只需拥有其中的一个角色就能成功访问对应的URL。
        这里的“ROLE_USER”表示请求的用户应当具有ROLE_USER角色。“ROLE_”前缀是一个提示Spring使用基于角色的检查的标记。-->
        <!--注:auto-config="true"时,SpringSecurity发现没有登录回自动创建登陆页面-->
        <security:http>
            <!--http元素下的form-login元素用来定义表单登录信息.login-page指定用户指定的登录页-->
            <!--  username-parameter:表示登录时用户名使用的是哪个参数,默认是“j_username”。
      password-parameter:表示登录时密码使用的是哪个参数,默认是“j_password”。
      login-processing-url:表示登录时提交的地址,默认是“/j-spring-security-check”。这个只是Spring Security用来标记登录页面使用的提交地址,真正关于登录这个请求是不需要用户自己处理的。-->
             <security:form-login login-page="/login.jsp"
                                  login-processing-url="/login.do"
                                  username-parameter="username"
                                  password-parameter="password"
                                  authentication-success-handler-ref="authSuccess"    --用作登陆成功后的处理bean
                                   />
            <!-- IS_AUTHENTICATED_ANONYMOUSLY 表示匿名用户可以访问,与ROLE_ANONYMOUS效果相同 -->
            <!--<security:intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>-->
            <security:intercept-url pattern="/**" access="ROLE_USER"/>
        </security:http>

    二、form-login做登陆引导处理 元素:authentication-success-handler-ref。具体配置见上配置,另外如还需使用Spring Security做登陆成功后的引导处理,还需配置如下bean.

     <bean name="authSuccess" class="com.vrv.springMvcDemo.security.AuthenticationSuccessHandlerImpl"></bean>
    authSuccess 的实现类代码如下:
    package com.vrv.springMvcDemo.security;
    
    import org.springframework.security.core.Authentication;
    import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /*
    *
     * Created by Administrator on 2014/12/5.
    */
    
    
    public class AuthenticationSuccessHandlerImpl implements AuthenticationSuccessHandler {
        @Override
        public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
            response.sendRedirect("index.jsp");
        }
    }

    如果不需要Spring Security进行登陆成功引导处理,直接使用指定页面则可使用default-target-url 进行配置。如下:

    <security:form-login login-page="/login.jsp"
                                  login-processing-url="/login.do"
                                  username-parameter="username"
                                  password-parameter="password"
                                  default-target-url="/index.jsp"
                                   />

    三、form-login 登陆失败后处理。配置如下:

    <security:http security="none" pattern="/loginFailure.jsp"></security:http>
    <security:form-login login-page="/login.jsp"
                                  login-processing-url="/login.do"
                                  username-parameter="username"
                                  password-parameter="password"
                                  default-target-url="/index.jsp"
                                  authentication-failure-url="/loginFailure.jsp"
                                   />

    注意:此处loginFailure.jsp需配置为不需要进行安全认证,否则此页面由于Spring Security 而不能访问

    同 AuthenticationSuccessHandler 进行登陆成功处理,登陆失败除了可以指定authentication-failure-url之外,form-login同样允许我们指定认证失败后的页面和对应认证失败后的处理器AuthenticationFailureHandler。

  • 相关阅读:
    Visual Studio 2012 中的ASP.NET Web API
    CentOS配置RPMForge软件源
    CentOS设置Mono环境变量
    使用 MEF 轻松实现云部署
    WiX 3.6——强大的.NET部署工具
    Redis应用场景
    How does it work in Mono's C# compiler?
    .NET程序员应该关注开源社区
    ASP.NET Web API和依赖注入
    [招聘帖]IT应用开发工程师
  • 原文地址:https://www.cnblogs.com/tyb1222/p/4146900.html
Copyright © 2011-2022 走看看