初始spring security(一)

第一次接触spring security,第一个例子是最简单,实现的功能也仅仅是权限控制一些最基本的功能;

首先是web.xml文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5"
 3     xmlns="http://java.sun.com/xml/ns/javaee"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7   <display-name></display-name>
 8    <!-- 获取application-security.xml的位置 -->
 9   <context-param>
10    <param-name>contextConfigLocation</param-name>
11    <param-value>
12    classpath:application*.xml
13    </param-value>
14   </context-param>
15    <!-- 对spring容器进行实例化(监听) -->
16    <listener>
17     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
18     </listener>
19    <listener>
20     <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
21    </listener>
22    <!-- SpringSecurity必须的filter -->
23    <filter>
24     <filter-name>springSecurityFilterChain</filter-name>
25     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
26     </filter>
27     <filter-mapping>
28     <filter-name>springSecurityFilterChain</filter-name>
29     <url-pattern>/*</url-pattern>
30    </filter-mapping>
31    <!-- 设置session时间 -->
32    <session-config>
33    <session-timeout>30</session-timeout>
34    </session-config>
35 </web-app>

web.xml的配置比较熟悉,所有没有什么太难的。

接下来是核心applicationContext-security.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:security="http://www.springframework.org/schema/security"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans
 6             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 7             http://www.springframework.org/schema/security
 8             http://www.springframework.org/schema/security/spring-security-3.0.xsd">
 9 <!-- 配置保护资源 -->
10 <security:http auto-config="true" access-denied-page="/deniedpage.jsp">
11 <!-- 设置同步会话控制 -->
12 <security:session-management  invalid-session-url="/login.jsp" session-fixation-protection="none">
13 <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="false" expired-url="/sessionTimeout.jsp"/>
14 </security:session-management>
15 <!-- http表达验证 -->
16 <security:form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1" default-target-url="/success.jsp"/>
17 <security:logout/>
18 <security:intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
19 <security:intercept-url pattern="/index.jsp" access="ROLE_USER,ROLE_ADMIN"/>
20 <security:intercept-url pattern="/**" access="ROLE_USER"/>
21
22 </security:http>
23 <!-- 配置用户 -->
24 <security:authentication-manager>
25 <security:authentication-provider>
26 <security:jdbc-user-service data-source-ref="dataSource"/>
27 </security:authentication-provider>
28 </security:authentication-manager>
29 <!-- 配置数据库信息 -->
30 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
31 <property name="driverClass" value="${db.driverClass}"/>
32 <property name="jdbcUrl" value="${db.jdbcUrl}"/>
33 <property name="user" value="${db.user}"/>
34 <property name="password" value="${db.password}"/>
35 </bean>
36 <!-- 读取资源文件 -->
37 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
38 <property name="locations">
39 <list>
40 <value>classpath:constants.properties</value>
41 </list>
42 </property>
43 </bean>
44 </beans>

注解:

1、从session缓存中获取当前session信息,如果发现过期了,就跳转到expired-url配置的url或者响应session失效提示信息。当前session有哪些情况会导致session失效呢?这里的失效并不是指在web容器中session的失效,而是spring security把登录成功的session封装为SessionInformation并放到注册类缓存中,如果SessionInformation的expired变量为true,则表示session已失效。所以,ConcurrentSessionFilter过滤器主要检查SessionInformation的expired变量的值。

2、如果concurrency-control标签配置了error-if-maximum-exceeded="true",max-sessions="1",那么第二次登录时,是登录不了的。如果error-if-maximum-exceeded="false",那么第二次是能够登录到系统的,但是第一个登录的账号再次发起请求时,会跳转到expired-url配置的url中(如果没有配置,则显示This session has been expired (possibly due to multiple concurrent logins being attempted as the same user).提示信息)

然后是连接数据库的constants.properties:

db.driverClass=com.mysql,jdbc.Driver
db.jdbcUrl=jdbc:mysql://localhost:3306/springsecurity
db.user=root
db.password=luwenhu

最后就是jsp文件,这个没有什么特别的,比如login.jsp:

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7
 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 9 <html>
10   <head>
11     <base href="<%=basePath%>">
12     <title>登录界面</title>
13   </head>
14   <body >
15   <c:if test="${not empty param.login_error }">
16   <font color="red">
17   登录失败,请重试!<br/>
18   原因:<c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message }"></c:out>
19   </font>
20   </c:if>
21    <form action="/acegi1/j_spring_security_check" method="post">
22    username:<input type="text" name="j_username"/><br/>
23    password:<input type="password" name="j_password"/></br>
24    <input type="checkbox" name="_spring_security_remember_me">两周内自动登录
25    <input type="submit" value="用户登录">
26    </form>
27   </body>
28 </html>

今天就学了这些,明天继续深入spring security,加入自己的filter。

时间: 2024-10-04 09:12:15

初始spring security(一)的相关文章

初识Spring Security

本文参考或者转自:http://haohaoxuexi.iteye.com/blog/2154299 1.新建Spring Security配置文件spring-security.xml:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="htt

spring security 1

首先我们为Spring Security专门建立一个Spring的配置文件,该文件就专门用来作为Spring Security的配置.使用Spring Security我们需要引入Spring Security的NameSpace. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/securit

[转] Spring Security(01)——初体验

[转自:http://haohaoxuexi.iteye.com/blog/2154299] 首先我们为Spring Security专门建立一个Spring的配置文件,该文件就专门用来作为Spring Security的配置.使用Spring Security我们需要引入Spring Security的NameSpace. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:security=&quo

SpringBoot集成Spring Security(4)——自定义表单登录

通过前面三篇文章,你应该大致了解了 Spring Security 的流程.你应该发现了,真正的 login 请求是由 Spring Security 帮我们处理的,那么我们如何实现自定义表单登录呢,比如添加一个验证码- 源码地址:https://github.com/jitwxs/blog_sample 文章目录 一.添加验证码 1.1 验证码 Servlet 1.2 修改 login.html 1.3 添加匿名访问 Url二.AJAX 验证三.过滤器验证 3.1 编写验证码过滤器 3.2 注

springboot集成spring security实现restful风格的登录认证 附代码

一.文章简介 本文简要介绍了spring security的基本原理和实现,并基于springboot整合了spring security实现了基于数据库管理的用户的登录和登出,登录过程实现了验证码的校验功能. 完整代码地址:https://github.com/Dreamshf/spring-security.git 二.spring security框架简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.主要包括:用户认证

SpringBoot学习(二)—— springboot快速整合使用spring security组

Spring Security 简介 spring security的核心功能为认证(Authentication),授权(Authorization),即认证用户是否能访问该系统,和授权用户可以在系统中进行哪些操作. 引入spring security组件 在 pom.xml 中加入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte

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

CAS 与 Spring Security 3整合配置详解

一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分.用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统.用户授权指的是验证某个用户是否有权限执行某个操作.在一个系统中,不同用户所具有的权限是不同的.比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改.一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限. 对于上面提到的两种应用情景,Spring Security 框

spring security+mybatis+springMVC构建一个简单的项目

1.引用 spring security ,这是一种基于spring AOP和Servlet的过滤安全框架.它提供全面的安全性解决方案,同时在web请求级和方法的调用级处理身份确认和授权.在spring framework基础上,spring security充分利用了依赖注入(DI,Dependency Injection)和AOP技术. 下面就让我们用一个小的晓得项目来出初步了解Spring Security 的强大功能吧. 2.项目实战    1)项目的技术架构:maven+spring