Spring Security学习一——简单应用

101 阅读2分钟

原文日期:2016-05-18


背景

由于工作需要,项目中使用了Spring Security安全框架,为了更上时代进步,先搭个简单应用玩玩。现学现卖,做个笔记,以便能留下更深映像。

开发工具:Eclipse、Maven3、Jetty6集成

开发语言和框架:Java8、Spring Security3.2.8

开始

  • 首先使用Eclipse构建一个maven web项目,这个不多讲,so easy,不会的自己脑补去。

  • 然后是修改web.xml配置文件,内容如下

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
	<display-name>Archetype Created Web Application</display-name>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:spring*.xml
		</param-value>
	</context-param>
	<filter>
		<filter-name>springSecurityFilterChain</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>
	<!-- spring security 的过滤器,这里配置拦截所有url -->
	<filter-mapping>
		<filter-name>springSecurityFilterChain</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- spring web监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
  • 配置spring-security.xml,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security.xsd">
	<!-- 自动配置模式,拦截所有请求,有ROLE_USER才可以通过 -->
	<http auto-config="true">
		<intercept-url pattern="/**" access="ROLE_USER" />
	</http>
	<!-- 认证管理器,用户名密码都集成在配置文件中 -->
	<authentication-manager>
		<authentication-provider>
			<user-service>
				<user name="admin" password="admin" authorities="ROLE_USER" />
			</user-service>
		</authentication-provider>
	</authentication-manager>
</beans:beans>
  • 配置maven文件,主要是增加spring security坐标,这里它会自动依赖spring web等相关jar包,pom.xml内容如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.ctosb</groupId>
	<artifactId>ctosb-spring-security</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>ctosb_spring_security Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<spring.security.version>3.2.8.RELEASE</spring.security.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<!-- spring security core -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-core</artifactId>
			<version>${spring.security.version}</version>
		</dependency>
		<!-- spring security web -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>${spring.security.version}</version>
		</dependency>
		<!-- spring security config -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>${spring.security.version}</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.3</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>ctosb-spring-security</finalName>
		<plugins>
			<plugin>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>maven-jetty-plugin</artifactId>
				<version>6.1.26</version>
				<configuration>
					<webDefaultXml>src/main/webapp/WEB-INF/webdefault.xml</webDefaultXml>
					<scanIntervalSeconds>10</scanIntervalSeconds>
					<stopKey>foo</stopKey>
					<stopPort>9999</stopPort>
				</configuration>
				<executions>
					<execution>
						<id>start-jetty</id>
						<phase>pre-integration-test</phase>
						<goals>
							<goal>run</goal>
						</goals>
						<configuration>
							<scanIntervalSeconds>0</scanIntervalSeconds>
							<daemon>true</daemon>
						</configuration>
					</execution>
					<execution>
						<id>stop-jetty</id>
						<phase>post-integration-test</phase>
						<goals>
							<goal>stop</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

如上配置文件pom.xml,在这里我配置了jetty插件,所以需要额外增加一个配置文件webdefault.xml,如果不想用jetty插件,本地有tomcat等容器可以启动亦可。这里就不贴webdefault.xml文件的内容,可以网上搜索。

由于添加了jetty插件,我这里就直接运行 clean install jetty:run可以运行工程,使用本地tomcat等容器的可以按自己方式去启动,关于jetty容器插件大家自己脑补去。

  • 经过上面,已经启动成功了,输入url访问工程http://localhost:8080/ctosb-spring-security/,将出现如下登录页面,该页面是spring security自带的默认登录页面。

  • 输入用户名admin,密码admin,将会登录访问index.jsp。用户密码如果输入错误,将会提示错误信息。

以上就是一个最简单的spring security应用,so easy吧。

总结

  • 配置web.xml文件。这里面配置最主要的是配置spring security的过滤器DelegatingFilterProxy,该过滤器是一个是一个spring security过滤拦截的入口。并且配置spring web的监听器ContextLoaderListener,这个是spring web应用必配的。

  • 配置spring-security.xml文件。该文件主要配置要访问的url需要什么要的权限,并且这里把用户配置在配置文件里面,没有用数据库,纯属方便测试。

  • 配置pom.xml文件。加入spring security相关jar包的坐标

未完待续。。。