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。

时间: 2024-07-29 18:24:34

Spring Security登陆的相关文章

【学习、总结】Spring security 登陆超时处理

目标: 用户登陆超过一定时间,在页面做请求时,提示类似登陆已超时,请重新登陆信息. 实现: 1.超时时间配置(web.xml): <session-config> <!-- 10分钟 --> <session-timeout>10</session-timeout> <tracking-mode>COOKIE</tracking-mode> <cookie-config> <secure>false</s

【Spring Boot】Spring Security登陆异常出路

Security 配置 package cn.young.greenhome.config; import cn.young.greenhome.module.auth.UserDetailsServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.spring

用spring security实现简单的登陆和权限角色控制

 随笔简介 spring版本:4.3.2.RELEASE+spring security 版本:4.1.2.RELEASE(其它不做说明) 所展示内容全部用注解配置 springmvc已经配置好,不作说明 会涉及到springmvc,spel,el的东西,不熟悉的同学可以先去看一下这方面内容,特别是springmvc 首先想一下,登陆需要什么,最简单的情况下,用户名,密码,然后比对数据库,如果吻合就跳转到个人页面,否则回到登陆页面,并且提示用户名密码错误.这个过程中应该还带有权限角色,并且贯穿整

Spring Security简单的登陆验证授权

Spring Security的介绍就省略了,直接记录一下登陆验证授权的过程. Spring Security的几个重要词 1.SecurityContextHolder:是安全上下文容器,可以在此得知操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限-这些都被保存在SecurityContextHolder中. Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

Ajax登陆,使用Spring Security缓存跳转到登陆前的链接

Spring Security缓存的应用之登陆后跳转到登录前源地址 什么意思? 用户访问网站,打开了一个链接:(origin url)起源链接 请求发送给服务器,服务器判断用户请求了受保护的资源. 由于用户没有登录,服务器重定向到登录页面:/login 填写表单,点击登录 浏览器将用户名密码以表单形式发送给服务器 服务器验证用户名密码.成功,进入到下一步.否则要求用户重新认证(第三步) 服务器对用户拥有的权限(角色)判定.有权限,重定向到origin url; 权限不足,返回状态码403( "禁

Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

Spring Security 解析(六) -- 基于JWT的单点登陆(SSO)开发及原理解析 ??在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .Spring Security Oauth2 等权限.认证相关的内容.原理及设计学习并整理一遍.本系列文章就是在学习的过程中加强印象和理解所撰写的,如有侵权请告知. 项目环境: JDK1.8 Spring boot 2.x Spring Security 5.x ?

Spring Security入门Demo

一.spring Security简介 SpringSecurity,这是一种基于Spring AOP和Servlet过滤器的安全框架.它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权.在Spring Framework基础上,Spring Security充分利用了依赖注入(DI,Dependency Injection)和面向切面技术. 二.建立工程 参考http://blog.csdn.net/haishu_zheng/article/details/51490

spring security实现限制登录次数功能

本节是在基于注解方式进行的,后面的例子都会基于注解形式,不再实现XML配置形式,毕竟注解才是趋势嘛! 关键在于实现自定义的UserDetailsService和AuthenticationProvider 项目结构如下: 查看spring security的源代码可以发现默认security已经定义的user中的一些变量,鉴于此创建users表如下: CREATE TABLE users ( username VARCHAR(45) NOT NULL, password VARCHAR(45)

Spring Security 3 (三) 用户数据存放于数据库

上章回顾: 上一章中,我们将用户名.密码以及用户对应的角色都配置于applicationContext-security.xml中,基本实现了我们能控制用户的访问权限.但是在现实开发中,我们不可能将用户信息硬编码在配置文件中,通常我们都是存放到数据中.同时我们应该对用户的密码进行加密存储. 目标: 1.将用户信息存放于数据库 2.对用户的密码进行加密 详细操作: 1.其他代码参考上一章中代码.本章中,首先我们要创建一张数据表来记录我们的用户信息.SpringSecurity提供的验证机制中,首先