Spring Security 入门(一)

当你看到这篇文章时,我猜你肯定是碰到令人苦恼的问题了,我希望本文能让你有所收获。

本人几个月前还是 Spring 小白,几个月走来,看了 Spring,Spring boot,到这次的 Spring Security。

为了避免大家踩坑,本人将入门的经验传授给那些和我一样正在学习 Spring Security 的小白。

我们从官方例子学习起:

1、我们先来创建一个 Spring Boot 的项目 HelloWorld:

  我用的开发工具是 eclipse,如果没装 STS 的话,请点击 Help -> Eclipse MarketPlace...

  

2、点击 File -> New -> Spring Starter Project。

  然后我们根据需要进行选择,如图所示:

        

3、项目创建好后的目录如图所示:

  

4、接下来我们新建一个包,取名为 security.config,再在包下建一个类并使其继承 WebSecurityConfigurerAdapter。

5、这样就已经可以生成 jar 啦,我们右键项目 Run as -> Maven Build...  然后 Debug,就会在 target 目录下生成 jar 。

6、右键生成的 jar,点击属性后会看到它的文件位置,我们在控制台运行它:

  java -jar C:\Users\Anonymous\eclipse-workspace\HelloWorld\target\HelloWorld-0.0.1-SNAPSHOT.jar

  再在浏览器输入 http://localhost:8080/ 就会出现一个登录页面。

  用户名为 user,密码在控制台可找到: Using generated security password: 254f14b9-a3e4-4dd5-9888-4c46b0c27e3f

  输入进去就会出现如下图片:

  

7、让我们从头回顾一下,我们干了啥!我们仅仅在 security 包下创建了一个 config 子包。

   然后在该子包里创建了一个类并让它继承 WebSecurityConfigurerAdapter 类,并在类上加了一个注解 @EnableWebSecurity。

   我们打开 HelloWorldApplication 类,可以看到 main() 函数里只一行代码:

   SpringApplication.run(HelloWorldApplication.class, args);  其实这一行代码的作用总的来说是加载整个项目的意思。

   在这个类上方有个 @SpringBootApplication 注解,我们将鼠标放在上面可以看到该注解是由一系列注解组成的。

   我们可以把这个类比作一个树的根,所有其他的配置都需要以它为基础而展开,所以项目其他的包应该都是它的子包。

8、我们再看看自己创建的类 WebSecurityConfig,这个类的 @EnableWebSecurity 注解会启用 Web 安全功能。

   但是它本身并没有什么用处,Spring Security 必须配置在一个实现了 WebSecurityConfigurer 的 bean 中,

   或者(简单起见)扩展 WebSecurityConfigurerAdapter。

9、好啦,最基础的就是这些啦,让我们来实现一下让它打印 HelloWorld!

   在配置类中我们写上如下代码:

package security.config;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // TODO Auto-generated method stub
        http.authorizeRequests()
        .antMatchers("/login").permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin().defaultSuccessUrl("/hello");
    }
}

10、再在控制器类中写上如下代码:

package security.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello World";
    }
}

11、好啦,大功告成,代码已经可以运行啦。现在我们来了解一下它们。

  在 WebSecurityConfig 类中我们重写了 configure(HttpSecurity http) 方法,这个方法是完成用户授权的。

  还有另外一个 configure(AuthenticationManagerBuilder auth) 方法,这个方法是完成用户认证的。

  暂时我们只了解第一个,第二个我们在(二) 中了解。

  以下内容摘自 《Spring Boot2 企业应用实战》:HttpSecurity 的 authorizeRequests() 方法有多个子节点。

  其中每个 matcher 按照它们的声明顺序执行,指定用户可以访问的多个 URL 模式。

  Ⅰ、antMatchers 使用 Ant 风格匹配路径。

  Ⅱ、regexMatchers 使用正则表达式匹配路径。

  在匹配了请求路径后,可以针对当前用户的信息对请求路径进行安全处理。

方法 用途
anyRequest 匹配所有请求路径
access(String) Spring EL 表达式结果为 true 时可以访问
anonymous() 匿名可以访问
denyAll() 用户不能访问
fullyAuthenticated() 用户完全认证可以访问(非 remember-me 下自动登录)
hasAnyAuthority(String...) 如果有参数,参数表示权限,则其中任何一个权限可以访问
hasAnyRole(String...) 如果有参数,参数表示角色,则其中任何一个角色可以访问
hasAuthority(String...) 如果有参数,参数表示权限,则其权限可以访问
hasIpAdress(String...) 如果有参数,参数表示 IP 地址,如果用户 IP 和参数匹配,则可以访问
hasRole(String...) 如果有参数,参数表示角色,则其角色可以访问
permitAll() 用户可以任意访问
rememberMe() 允许通过 remember-me 登录的用户访问
authenticated() 用户登录后可访问

12、现在我们读一下代码的意思:授权请求的路径为 "/login" 时,用户可以任意访问。

  其他匹配所有请求的路径都需要授权才能访问。.and() 是再从 http 参数开始。

  举个例子:.and().formLogin() 相当于 http.formLogin()。

  formLogin():开始设置登录操作。defaultSuccessUrl("/hello"): 指定登录成功后转向的页面。

  另外还有其他的方法,我们在(二)再了解。控制类中的代码是常见的代码,就不说了。

13、代码写完了,我们在控制台运行一下,再在浏览器输入:http://localhost:8080/login:

  登录后,就可以看到 Hello World!

14、运行结果如上图所示,市面上有些书说输入 http://localhost:8080/ 就会自动跳转的 login 页面。

  这的确没错,但是当我们输入用户名密码后,会进入到 error 页面。这是为什么呢?

  这是因为 "/" 请求需要用户认证,而又没有运行任意访问,所以跳转到 login 页面进行认证。

  认证成功后,控制类中并没有对 "/" 请求的处理。所以这将导致出现错误页面。

  注意这是一个大坑,坑了本人好几天了。

15、最后,上面的例子仅仅是一个简单的入门例子,我们更常用的是自定义登录页面,并且用户名和密码都是从数据库读取来认证的。

  这一部分内容将在(二)中讲解。

16、如果这篇文章帮助了你,请给我点个赞哦!方便的话关注一下哒!

原文地址:https://www.cnblogs.com/M-Anonymous/p/11693862.html

时间: 2024-11-06 22:06:53

Spring Security 入门(一)的相关文章

Spring Security入门

Spring Security入门: http://www.mossle.com/docs/auth/html/index.html Spring Security 默认的过滤器链 https://blog.csdn.net/u013421749/article/details/78626275 原文地址:https://www.cnblogs.com/aligege/p/9396278.html

Spring Security 入门(三)

在说完了Spring Security框架的功能和执行流程后,就到了写它Spring Boot的集成,先来看最简的配置: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> </parent>

Spring Security 入门(二)

Spring Security 入门(一)中说到,Spring Security执行流程第一步是容器启动时加载系统资源与权限列表,第二步是WEB容器启动时加载拦截器链,并介绍了自定义拦截器的方法.接下来第三步步就是用户登录.介绍下用户登录的流程: 获取用户名和密码,并放入一个 UsernamePasswordAuthenticationToken 实例中(Authentication接口的一个实例); 这个token被传递到一个 AuthenticationManager 实例中进行验证; 若验

Spring Security 入门(1-3)Spring Security oauth2.0 指南

入门 这是支持OAuth2.0的用户指南.对于OAuth1.0,一切都是不同的,所以看它的用户指南. 本用户指南分为两个部分,第一部分是OAuth2.0提供端(OAuth 2.0 Provider),第二部分是OAuth2.0的客户端(OAuth 2.0 Client) OAuth2.0提供端 OAuth2.0的提供端的用途是负责将受保护的资源暴露出去.建立一个可以访问受保护的资源的客户端列表. 提供端是通过管理和验证可用于访问受保护的资源的OAuth 2令牌来做的. 在适当的地方,提供端必须为

Spring Security 入门原理及实战

参考博客: https://www.cnblogs.com/demingblog/p/10874753.html Spring Security 是spring项目之中的一个安全模块,可以非常方便与spring项目无缝集成. 特别是在spring boot项目中加入spring security更是十分简单, 这里就简单介绍一下入门案例和使用原理吧! 写一个简单的springboot测试例子: @Controller public class AppController { @RequestMa

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 入门(1-14)Spring Security 开发指南(转)

开发指南:http://www.cnblogs.com/xingxueliao/p/5911292.html Spring OAuth2.0 提供者实现原理: Spring OAuth2.0提供者实际上分为: 授权服务 Authorization Service. 资源服务 Resource Service. 虽然这两个提供者有时候可能存在同一个应用程序中,但在Spring Security OAuth中你可以把 他它们各自放在不同的应用上,而且你可以有多个资源服务,它们共享同一个中央授权服 务

Spring Security 入门详解

序:本文主要参考 spring实战 对里面的知识做一个梳理 1.Spring Security介绍 Spring Security是基于spring的应用程序提供声明式安全保护的安全性框架,它提供了完整的安全性解决方案,能够在web请求级别和方法调用级别处理身份证验证和授权.它充分使用了依赖注入和面向切面的技术. Spring security主要是从两个方面解决安全性问题: web请求级别:使用servlet过滤器保护web请求并限制URL级别的访问 方法调用级别:使用Spring AOP保护

spring security入门教程 demo注解

http://www.mossle.com/docs/springsecurity3/html/ns-config.html#ns-minimal 这是3.0的中文文档,写的比较详细,还有<spring in action>最新版也有一章专门是讲这个的.在学习的过程下载了spring security的github上面的demo,其中tutorial-xml是最简单的demo了.在源码里我把里面的一些重要的地方都详细注解了,做个备忘. ps:demo的logout似乎不能用,有bug. 链接: