Spring Security 使web应用更加安全

Linux条件变量pthread_condition细节(为何先加锁,pthread_cond_wait为何先解锁,返回时又加锁) 一览本文目的为何需要条件变量三个问题传入前锁mutex传入后解锁mutex返回前再次锁mutex尾语 本文目的     首先说明,本文重点不在怎么用条件变量。这里我先列出 apue 中对于pthread_cond_wait函数的这么一段话: “ 调用者把锁住的互斥量传给函数,函数然后自动把调用线程放到等待条件的线程列表上,**对互斥量解锁。**这就关闭了条件检查和线程进入休眠状态等待... 阅读详情

一句话介绍

Spring Security 是基于Spring AOP和Servlet过滤器的安全框架,安全主要包括两个操作“认证”与“验证”(有时候也会叫做权限控制)

开始使用

引入类库,例子中使用到的security版本是3.1

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <org.springframework-version>4.1.4.RELEASE</org.springframework-version>
        <org.slf4j-version>1.7.8</org.slf4j-version>
    </properties>
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <!-- Spring security -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>3.1.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-crypto</artifactId>
            <version>3.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>3.1.3.RELEASE</version>
        </dependency>
    </dependencies>

配置web.xml

    <!-- security过滤所有请求 -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 载入security配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/security.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

在WEB-INF下创建spring文件夹并新建一个security的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:security="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd ">

    <!-- Spring Security 3.1 基于Spring AOP和Servlet过滤器的安全框架 -->
    <!-- pattern需要控制的url  access 权限级别 这里指定的权限级别是管理员权限 -->
    <security:http auto-config="true">
        <security:intercept-url pattern="/**" access="ROLE_ADMIN" />
    </security:http>
    <!-- AuthenticationManager用于配置认证身份  -->
    <security:authentication-manager>
        <security:authentication-provider>
            <!-- 这里配置两个不同权限账户测试 -->
            <security:user-service>
                <security:user name="user" password="user" authorities="ROLE_USER" />
                <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
            </security:user-service>
        </security:authentication-provider>
    </security:authentication-manager>
</beans>

启动项目

这里写图片描述

可以看到的是由于我们并没有登录(Session中没有登录信息),Spring 会给我们一个登录页面,即我们的安全框架生效了。使用user/user 登录会跳403(没有访问权限) ;admin/admin 会跳 index 首页。

那么

我们也没有写这个登录页面,它从哪里来呢?
这时我们需要看security的配置文件

 <security:http auto-config="true">

这个配置项即告诉spring,我们使用默认的配置项,框架中的
org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter 的 generateLoginPageHtml() 方法会生成这个登录页面,大家可以去查阅一下这部分的源代码

还有一个问题就是这个action是怎么被处理的?
同样的,默认配置中框架中的
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter 的 attemptAuthentication() 会去处理这个请求。

【13】Python3 - 多线程共享变量问题(加锁、解锁、可重入锁) 共享变量问题 当一个进程的多个线程需要访问同一个变量的时候,就产生了共享变量的问题。可以通过加锁或者信号灯的方式,解决此问题。 解决互斥 - 方法1:加锁 锁LOCK: 通常对互斥资源进行加锁,在加锁之后,可以对互斥资源进行排他性的使用。在使用完此互斥资源后,要进行解锁。使其他线程可以对该互斥资源进行下一步操作。 锁lock 其实是一个标志,表示该互斥资源正在被使用。 加锁相当于一个令牌,... 阅读详情

相关推荐

在sap中对表的加锁和解锁

注意:在一个程序中给表加锁,程序结束会自动解锁,可以通过SM12查看是否个表加锁成功lock mode有三种模式:分别是S,E,X.含义如下:模式E:当更改数据的时候设置为此模式。模式S:本身不需要更改数据,但是希望显示的数据不被别人更改。模式X:和E类似,但是不允许累加,完全独占。允许附加锁模式 E S XE 否(是) 否(是) 否(否)S 否(是[无其他用户加S]) 是(是) 否(否)X 否(否) 否(否) 否(否)括号外为其他用户操作,括号内为同一个用户的操作。

matinal 當冬夜漸暖 。公众号:matinal 1572

毕业设计Spring boot问题记录(后端三):springSecurity 登录时账号密码正确后,总是重定向至登陆页面,定义successHandler配置失效

原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重 kzhi报错信息 POSTMAN调试结果 控制台信息 2022-05-08 19:58:32.530 INFO 8160 --- [ restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManag

MyYaip的博客 2663

线程同步之互斥量加锁解锁

互斥量从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁后,任何其他试图再次对互斥量加锁的线程将会被阻塞,直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为可运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去等待它重新变为可用。在这种方式下,每次只有一个线程可以向前运行。 与互斥锁相关的api 1.创建及销毁互斥锁 int pthread_mutex_init(pth

weixin_48080013的博客 278

SpringSecurity篇-(1)-零配置启用

如果用版本对应的版本,各位一定要注意下,5.7版本前后有一些配置是不一样的,我这里先记录5.7以后的配置Maven只需要引入两个依赖 直接来一个吧! 尝试请求 http://localhost:9001/hello(端口自己配哈),SpringSecurity会默认跳到其登录页在什么都不配置的情况下,SpringSecurity已经帮我们做了安全控制仔细观察控制台日志可以看到为我们生成了一个默认密码,并且提示我们,此密码仅供开发模式使用,你一定要在生产环境更改安全配置作者看到这里的时候不禁有两个疑问:部分猿

PowerJ的博客 希望对你有帮助 1962

为什么多线程读写 shared_ptr 要加锁?

为什么多线程读写 shared_ptr 要加锁?陈硕(giantchen_AT_gmail_DOT_com)2012-01-28最新版下载:http://chenshuo.googlecode.com/files/CppEngineering.pdf我在《Linux 多线程服务端编程:使用 muduo C++ 网络库》第 1.9 节“再论 shared_ptr 的线程安全”中写道:(shared_

陈硕的Blog 9万+

UOS 加锁文件夹/文件之解锁

UOS 系统文件管理

iprobobo的博客 2万+

Nacos安装与启动

supportLists]n [endif]Nacos是Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。supportLists]n [endif]执行nacos/config/nacos-mysql.sql脚本文件,注意先在本机的MYSQL数据库中创建nacos数据库;supportLists]n [endif]Nacos相当于Eureka、Config、Bus三大组件的集合体。

Syasjy的博客 1314

RR与RC隔离级别下MySQL不同的加锁解锁方式

|  RC与RR隔离级别下MySQL不同的加锁解锁方式MySQL5.7.21数据准备root@localhost : pxs 05:26:27&gt; show create table dots\G*************************** 1. row ***************************  Table: dotsCreate Table: CREATE TABL...

woqutechteam的博客 1124

本地nacos启动失败,org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean **

nacos本地启动失败,数据库版本不对应

qq_31839075的博客 1万+

Pixhawk解锁与加锁:飞行安全状态跃迁的底层原理与实操指南

Pixhawk解锁与加锁并非简单通断电机的控制指令,而是PX4飞控系统执行的飞行安全状态跃迁(Flight Safety State Transition),其本质是基于传感器健康度、遥控信号质量、姿态稳定性等多维条件的实时交叉验证。该机制遵循NASA适航标准DO-178C,通过预解锁检测(Pre-arm Check)、解锁确认(Arm Confirmation)和解锁后验证(Post-arm Validation)三阶段闭环,确保人机双向信任链建立。技术价值在于将人为误操作概率压降至10⁻⁶量级,支撑农业

chuanjiaoye5017的博客 310

ReentrantLock锁底层原理(加锁、解锁、可打断模式、公平锁、条件变量等源码)

一、加锁 1、lock() final void lock() { //先尝试直接加锁 if (compareAndSetState(0, 1)) //成功了就结束方法 setExclusiveOwnerThread(Thread.currentThread()); else //失败了调用acquire(1) acquire(1); } 2、acquire(1) public final void acquire(int arg) {

flowral的博客 869

【SpringSecurity】学习笔记(一)

简介、创建测试项目、SpringSecurity基本原理、用户认证

lushixuan12345的博客 872

Linux线程同步之互斥量加锁解锁pthread_mutex_init、pthread_mutex_destroy、pthread_mutex_lock、 pthread_mutex_unlock

Linux线程同步之互斥量加锁解锁pthread_mutex_init、pthread_mutex_destroy、pthread_mutex_lock、 pthread_mutex_unlock

l_z_y_000的博客 3846

Oracle 如何通过SQL语句对表中某一行数据加锁

      我们都知道一些数据库加锁的理论,比如:表锁、行锁、悲观锁和乐观锁,但是由于平时写SQL的时候并没有真正使用过,所以只知道理论,并不知道如何去使用。      今天查了一下资料,对如何通过SQL语句加锁有了一些了解,特整理一下:一.  session的概念     session,即“会话”,在plsql中,一个新的SQL WINDOW就是一个新的session会话。二. 建表并初始化数...

u013178480的博客 9674

多线程与高并发—— Synchronized 加锁解锁流程

由于Monitor基于操作系统调用,上下文切换导致开销大,在竞争不激烈时性能不算很好,在jdk6之后进了系列优化。从重量级锁的优化开始讲,一是自旋锁,二是尽量避免进入Monitor,即使用轻量级锁讲解轻量级锁及加锁解锁流程轻量级锁在没有竞争时,每次重入仍然需要执行cas操作,为解决这个问题,因而产生了偏向锁详细介绍偏向锁Synchronized的原理和优化就暂且讲到这,两篇文章主要都是对概念的介绍、各个状态的锁的结构介绍和阐述简化后的流程。...

JavaMonsterr的博客 668

分布式锁-这一篇全了解(Redis实现分布式锁完美方案)

前言 在某些场景中,多个进程必须以互斥的方式独占共享资源,这时用分布式锁是最直接有效的。 随着技术快速发展,数据规模增大,分布式系统越来越普及,一个应用往往会部署在多台机器上(多节点),在有些场景中,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上运行,即保证某一方法同一时刻只能被一个线程执行。在单机环境中,应用是在同一进程下的,只需要保证单进程多线程环境中的线程安全性,通过 JAV...

Franco的博客 2万+

深入了解glibc的互斥锁的加锁过程

深入了解glibc的互斥锁

小x的博客 1644

别再怕非观测区了!手把手教你用移相法搞定PMSM单电阻FOC的电流重构难题

本文详细解析了永磁同步电机(PMSM)单电阻FOC系统中非观测区的电流重构难题,重点介绍了移相法的工程实践。通过STM32平台的具体实现和调试指南,帮助工程师有效解决相电流检测中的采样窗口不足问题,提升系统稳定性和性能。

weixin_27252001的博客 434
上一篇: 数据库连接池性能横向比对(hikari druid c3p0 dbcp jdbc)
下一篇: Spring Task 任务调度器
xiaoping0915
博客等级 码龄12年 158粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值