`

认识spring security

阅读更多

    在一个系统中认证和授权是常有的事情,现在比较流行的框架有spring security、shiro等等。他们都能很好的帮助我们完成认证和授权的功能。那么假如说让我们自己完成一个登录那么应该大致的流程是怎么样的呢?

 

、我们肯定有一个处理页面上表单提交的url处理器,此处我们放置在Filter中进行处理,假如就叫做UsernamePasswordAuthenticationFilter  ,在这个Filter里面我们需要将用户提交上来的用户名和密码封装成一个对象,假如叫做UsernamePasswordAuthenticationToken。

、有了上一步的 UsernamePasswordAuthenticationToken 之后,我们肯定要对这个token进行一个认证,那UsernamePasswordAuthenticationFilter中就必须要有一个认证管理器(AuthenticationManager),来处理我们这个token的认证。

、有了认证管理器后,那这个认证管理器可能可以处理多种方式的登录,比如基于ip地址的登录、基于用户名和密码的登录、基于remember me(记住我)的登录等等。那么在我们的认证管理器的实现中(ProviderManager)就应该存在一组AuthenticationProvider,每个AuthenticationProvider处理不同的Token认证。

       比如:DaoAuthenticationProvider用于处理UsernamePasswordAuthenticationToken

                  RememberMeAuthenticationProvider用于处理RememberMeAuthenticationToken

 四、当我们是基于用户名和密码登录认证时,那么对应的AuthenticationProvider就是DaoAuthenticationProvider,   那么我们肯定有一个接口根据用户输入的用户名返回一个用户对象即 UserDetailsService#loadUserByUsername(String) 接口,返回一个UserDetails 对象,有了用户对象后,我们系统中密码肯定是加密过的,那么就必须还要一个密码加密器PasswordEncoder,用于进行密码的校验。

、当完成上面的认证后

       成功认证:那么肯定有一个成功后的回调,加入是 AuthenticationFailureHandler , 在这个里面我们可以完成成功后页面的跳转

       认证失败:也有一个失败的回调,假如是 AuthenticationFailureHandler,可以记录失败的日志,完成失败后的跳转

 

有了上面的初步认识后,我们来看一下在spring security中是如何做的。

 

一、引入spring security的pom配置文件

<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>io.spring.platform</groupId>
				<artifactId>platform-bom</artifactId>
				<version>Brussels-SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

 二、进行spring security的配置

/**
 * spring security 的配置
 * 
 * @描述
 * @作者 huan
 * @时间 2017年11月1日 - 下午9:33:59
 */
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
	@Override
	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
		auth.userDetailsService(createUserDetailService())//
				.passwordEncoder(passwordEncoder())//
				.and()//
				.inMemoryAuthentication()//
				.withUser("admin")
				.password("admin")
				.roles("ADMIN");// 配置一个拥有用户名和密码的用户
	}
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.formLogin() // 表单登录
				.loginProcessingUrl("/login")//  处理登录的请求
				.loginPage("/login.html") // 自定义登录界面
				.usernameParameter("authUsername")//登录表单的用户名的name的值
				.passwordParameter("authPassword")//登录表单密码的name的值
				.successHandler(securityAuthenticationSuccessHandler())// 认证成功后的处理
				.failureHandler(securityAuthenticationFailureHandler()) // 认证失败后的处理
				.and()//
			.userDetailsService(createUserDetailService()) // 用户服务,根据用户名加载用户信息
			.logout() // 登出
				.logoutUrl("/logout") // 登出的url路径
				.addLogoutHandler(securityLogoutHandler())//登出时的处理操作
				.clearAuthentication(true)// 清除认证
				.invalidateHttpSession(true)// session失效
				.and()//
			.csrf() // csrf
				.disable()//
			.authorizeRequests()//
				.antMatchers("/login.html","/login").permitAll() // 可匿名访问
				.anyRequest().authenticated() // 除了上方的请求,其余的请求需要认证才可以访问
				.and()//
			.exceptionHandling()//
				.accessDeniedPage("/403.html"); // 没有权限访问的页面
	}

	@Bean
	public AuthenticationFailureHandler securityAuthenticationFailureHandler() {
		SecurityAuthenticationFailureHandler authenticationFailureHandler = new SecurityAuthenticationFailureHandler();
		authenticationFailureHandler.setDefaultFailureUrl("/login.html?error");
		return authenticationFailureHandler;
	}

	@Bean
	public AuthenticationSuccessHandler securityAuthenticationSuccessHandler() {
		SecurityAuthenticationSuccessHandler authenticationSuccessHandler = new SecurityAuthenticationSuccessHandler();
		authenticationSuccessHandler.setAlwaysUseDefaultTargetUrl(true);
		authenticationSuccessHandler.setDefaultTargetUrl("/index.html");
		return authenticationSuccessHandler;
	}

	@Bean
	public LogoutHandler securityLogoutHandler() {
		return new SecurityLogoutHandler();
	}
	
	@Bean
	public UserDetailsService createUserDetailService() {
		return new SecurityUserDetailServiceImpl(passwordEncoder());
	}

	/** 密码加密器 */
	@Bean
	public PasswordEncoder passwordEncoder() {
		return new BCryptPasswordEncoder();
	}
}

 三、各个实体类

 四、登录页

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
	<form action="/login" method="post">
		用户名:<input type="text" name="authUsername" /><br />
		密码:<input type="password" name="authPassword" /><br/>
		<input type="submit" value="登录">
	</form>
</body>
</html>

 五、首页

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
<link rel="stylesheet" type="text/css" href="/static/css/index.css">
</head>
<body>
	<h1>
		登录成功。<a href="/logout">退出</a> 
	</h1>
</body>
</html>

 六、界面效果

登录页

登录成功后的首页

 
 

 

 

 

  • 大小: 214.1 KB
  • 大小: 2.6 KB
  • 大小: 7.2 KB
分享到:
评论

相关推荐

    SpringSecurity入门小demo(SSM+Spring Security)

    在 `HelloSpringSecurity` 文件中,你可能看到以下关键代码: - **WebSecurityConfigurerAdapter** 类:这是 Spring Security 提供的配置适配器,可以覆盖其方法来定制安全规则。 - `configure(HttpSecurity http)...

    Spring Security学习总结一

    在深入了解Spring Security之前,我们需要认识到,传统的权限验证逻辑往往杂糅于业务逻辑之中,这种混合不仅使得代码难以维护,而且降低了系统的整体效率。每当用户执行操作时,系统必须判断该用户是否具有执行特定...

    Spring_Security安全框架应用指南

    1. **认识Spring Security** - Spring Security是一个基于Spring的框架,能够无缝地与各种Web容器集成。 - 它利用Spring的IOC(Inversion of Control)和AOP(Aspect Oriented Programming)特性,提供灵活且强大...

    springsecurity入门实例

    **Spring Security 入门实例详解** Spring Security 是一个强大的安全框架,用于保护...通过学习这个实例,你将对 Spring Security 有一个基础的认识,并能将其应用到实际项目中,为你的 Web 应用构建稳固的安全防护。

    spring secutiry essentials

    Spring Security是Java EE应用中广泛使用的一个安全框架,旨在为基于Spring的应用程序提供全面的安全保障。它提供了全面、可配置的安全...这些知识点有助于读者全面认识Spring Security框架,并引导读者进行系统学习。

    spring security权限管理

    总的来说,理解并掌握Spring Security的权限管理机制,需要对`UserDetails`接口、配置文件的解析以及数据库交互有深入的认识。通过自定义用户实体、配置安全规则以及实现数据访问层,我们可以构建出满足业务需求的...

    SpringBoot+SpringSecurity+JWT权限管理练习项目

    通过这个项目,初学者不仅能掌握SpringBoot的基础应用,还能深入理解SpringSecurity的权限控制机制,同时对JWT的原理和使用有了直观的认识。实践过程中,还需要了解数据库操作、HTTP协议、JSON格式等相关知识,对...

    Spring Security最容易懂的入门教程

    - 在web.xml中配置DelegatingFilterProxy来代理SpringSecurity中的核心部分过滤器,以及如何让这些过滤器获得Spring的webApplicationContext生命周期支持。 - 在Spring配置文件中引入SpringSecurity命名空间,并进行...

    Spring Security安全权限管理手册

    通过本文的学习,相信读者已经对Spring Security有了较全面的认识,并具备了将其应用于实际项目的能力。未来,随着技术的发展和安全威胁的变化,Spring Security也会持续更新和完善,为开发者提供更多有力的支持。

    基于Java语言的SpringSecurity框架学习与设计源码解析

    本项目聚焦于Java语言环境下,基于SpringSecurity框架的学习与设计,深入解析其源码,旨在帮助开发者深入理解SpringSecurity框架的工作原理和应用方式。项目内容丰富,包含30个Java源文件,覆盖了SpringSecurity的...

    基于Java的Spring Security框架源码学习与实践

    在深入探讨基于Java的Spring Security框架源码学习与实践的过程中,我们将会涉及到多个方面,包括Spring Security框架的核心概念、关键组件、以及如何通过源码来掌握其安全机制的实现原理。 首先,Spring Security...

    基于Java语言的Spring Security框架学习与设计源码解析

    基于Java语言的Spring Security框架学习与设计源码...通过阅读和分析源码,开发者不仅可以提升自己的代码阅读能力,还能深化对安全框架机制的认识,进而能够在实际工作中更加有效地应用Spring Security解决安全问题。

    毕业设计&课设_Spring Boot与Spring Security Java配置及集成测试用法的项目.zip

    本项目“毕业设计&课设_Spring Boot与Spring Security Java配置及集成测试用法的项目.zip”正是基于这一背景,提供了一个实践平台,让学生能够在真实的项目环境中体验和学习Spring Boot与Spring Security的配置与...

    Oauth 授权与资源服务器及客户端的Spring Security教程项目.zip

    本项目提供了一个完整的框架和实例,可以帮助学生在理解理论知识的同时,通过实践项目来加深对Spring Security以及Oauth安全机制的认识。 值得注意的是,项目中可能包含的README.md文件通常用于描述项目的安装、...

    spring boot+mybatis+secrity登陆查询数据库验证

    【标题】"Spring Boot + MyBatis + Security 登陆查询数据库验证"是一个初学者友好的实战项目,旨在演示如何在Spring Boot应用中整合MyBatis作为持久层框架,并利用Spring Security进行用户身份验证。这个项目涵盖了...

    spring开发指南(夏昕)

    1. **Spring概述**:首先介绍Spring的发展历程、核心理念以及在现代软件开发中的地位,让读者对Spring有一个整体的认识。 2. **环境配置**:详细阐述如何搭建Spring开发环境,包括安装JDK、设置开发工具(如IDEA或...

    跟我学spring3pdf,高清

    除了上述内容,书中的案例涵盖了Spring的应用上下文、Bean的生命周期管理、Spring的测试支持以及Spring与其他技术的整合,如Spring Security(安全框架)、Spring Batch(批量处理)等。这些章节旨在让读者全面掌握...

    Spring揭秘部分1

    通过学习这部分内容,读者可以建立起对Spring框架的整体认识,为后续的深入学习和实践打下坚实的基础。而"Spring揭秘部分2"和"Spring揭秘部分3"则可能进一步探讨Spring的其他模块和高级特性,如Spring Boot、Spring ...

    spring思维导图.zip

    通过学习以上知识点,并结合提供的"spring思维导图",读者可以更好地构建对Spring的整体认识,理解其设计理念,提升在实际项目中的应用能力。在实践中不断探索,Spring的奥秘会逐步揭示,成为你开发路上的强大助手。

    spring4框架系列[ 1 ]

    通过学习这个"Spring4框架系列[ 1 ]",初学者可以建立起对Spring框架的基本认识,并逐步掌握如何在实际项目中利用Spring进行高效开发。后续章节可能会深入讲解更多高级特性,如数据访问集成、事务管理、Spring Boot...

Global site tag (gtag.js) - Google Analytics