在本教程中, 我们将使用Spring MVC框架实现Spring Security。所有示例都是Spring MVC, 并使用Maven项目创建。
我们使用的是Spring Security 5.0.0.RELEASE版本, 下面是所有示例中使用的maven依赖项。
<
dependency>
<
groupId>
org.springframework.security<
/groupId>
<
artifactId>
spring-security-web<
/artifactId>
<
version>
5.0.0.RELEASE<
/version>
<
/dependency>
<
dependency>
<
groupId>
org.springframework.security<
/groupId>
<
artifactId>
spring-security-core<
/artifactId>
<
version>
5.0.0.RELEASE<
/version>
<
/dependency>
<
dependency>
<
groupId>
org.springframework.security<
/groupId>
<
artifactId>
spring-security-config<
/artifactId>
<
version>
5.0.0.RELEASE<
/version>
<
/dependency>
为了在Spring应用程序中实现Spring Security, 我们可以使用XML或基于Java的配置对其进行配置。
让我们看一个例子, 其中我们将使用XML来配置Spring Security。
创建一个Maven项目
单击文件菜单, 找到New→Maven Project, 如下面的屏幕截图所示。
文章图片
选择项目名称和位置
文章图片
提供项目名称
提供项目名称并选择包装类型作为war(Web Archive), 如下所示。
文章图片
完成项目, 它将为项目创建一个空的目录结构, 如下所示。
文章图片
最初, 它是空的。因此, 让我们创建一个Spring MVC应用程序并与Spring Security集成。
这是我们的项目布局。它包含一个控制器, 三个XML文件和两个JSP文件。
文章图片
Spring安全项目源代码
我们的项目名称为springsecurity, 包含以下源文件。
控制者
HomeController.java
package com.srcmini.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
@RequestMapping(value="http://www.srcmini.com/", method=RequestMethod.GET)
public String home() {
return "home";
}
@RequestMapping(value="http://www.srcmini.com/admin", method=RequestMethod.GET)
public String privateHome() {
return "privatePage";
}
}
Spring安全配置
spring-security.xml
<
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.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<
http auto-config="true">
<
intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')" />
<
/http>
<
authentication-manager>
<
authentication-provider>
<
user-service>
<
user name="admin" password="1234" authorities="hasRole(ROLE_ADMIN)" />
<
/user-service>
<
/authentication-provider>
<
/authentication-manager>
<
/beans:beans>
Servlet分派器
【Spring安全项目(XML配置)示例详细图解】spring-servlet.xml
<
?xml version="1.0" encoding="UTF-8"?>
<
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<
mvc:annotation-driven />
<
context:component-scan base-package="com.srcmini.controller">
<
/context:component-scan>
<
context:annotation-config>
<
/context:annotation-config>
<
bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<
property name="prefix" value="http://www.srcmini.com/WEB-INF/views/">
<
/property>
<
property name="suffix" value="http://www.srcmini.com/.jsp">
<
/property>
<
/bean>
<
/beans>
网络描述符
web.xml
<
?xml version="1.0" encoding="UTF-8"?>
<
!DOCTYPE xml>
<
web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<
!-- Spring Configuration -->
<
servlet>
<
servlet-name>
spring<
/servlet-name>
<
servlet-class>
org.springframework.web.servlet.DispatcherServlet<
/servlet-class>
<
load-on-startup>
1<
/load-on-startup>
<
/servlet>
<
servlet-mapping>
<
servlet-name>
spring<
/servlet-name>
<
url-pattern>
/<
/url-pattern>
<
/servlet-mapping>
<
listener>
<
listener-class>
org.springframework.web.context.ContextLoaderListener<
/listener-class>
<
/listener>
<
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>
<
context-param>
<
param-name>
contextConfigLocation<
/param-name>
<
param-value>
/WEB-INF/spring-servlet.xml
/WEB-INF/spring-security.xml
<
/param-value>
<
/context-param>
<
/web-app>
项目依赖
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/xsd/maven-4.0.0.xsd">
<
modelVersion>
4.0.0<
/modelVersion>
<
groupId>
com.srcmini<
/groupId>
<
artifactId>
springsecurity<
/artifactId>
<
version>
0.0.1-SNAPSHOT<
/version>
<
packaging>
war<
/packaging>
<
properties>
<
maven.compiler.target>
1.8<
/maven.compiler.target>
<
maven.compiler.source>
1.8<
/maven.compiler.source>
<
/properties>
<
dependencies>
<
dependency>
<
groupId>
org.springframework<
/groupId>
<
artifactId>
spring-webmvc<
/artifactId>
<
version>
5.0.2.RELEASE<
/version>
<
/dependency>
<
dependency>
<
groupId>
org.springframework.security<
/groupId>
<
artifactId>
spring-security-web<
/artifactId>
<
version>
5.0.0.RELEASE<
/version>
<
/dependency>
<
dependency>
<
groupId>
org.springframework.security<
/groupId>
<
artifactId>
spring-security-core<
/artifactId>
<
version>
5.0.0.RELEASE<
/version>
<
/dependency>
<
dependency>
<
groupId>
org.springframework.security<
/groupId>
<
artifactId>
spring-security-config<
/artifactId>
<
version>
5.0.0.RELEASE<
/version>
<
/dependency>
<
dependency>
<
groupId>
javax.servlet<
/groupId>
<
artifactId>
javax.servlet-api<
/artifactId>
<
version>
3.1.0<
/version>
<
scope>
provided<
/scope>
<
/dependency>
<
/dependencies>
<
build>
<
plugins>
<
plugin>
<
groupId>
org.apache.maven.plugins<
/groupId>
<
artifactId>
maven-war-plugin<
/artifactId>
<
version>
2.6<
/version>
<
configuration>
<
failOnMissingWebXml>
false<
/failOnMissingWebXml>
<
/configuration>
<
/plugin>
<
/plugins>
<
/build>
<
/project>
查看页面
home.jsp
<
html>
<
head>
<
meta content="text/html;
charset=UTF-8">
<
title>
Home<
/title>
<
/head>
<
body>
<
h2>
Welcome to srcmini spring tutorial!<
/h2>
<
/body>
<
/html>
privatePage.jsp
home.jsp
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<
title>
Admin<
/title>
<
/head>
<
body>
Hello Admin
<
/body>
<
/html>
输出
此示例使用Apache Tomcat v9.0执行。运行后, 它将向浏览器产生以下输出。
最初, 它将呈现显示以下输出的home.jsp页面。
文章图片
我们在管理页面中添加了spring安全性, 如果在浏览器中输入/ admin, 应用程序将产生以下输出。
要求网址:http:// localhost:8080 / springsecurity / admin
文章图片
现在, 这是Spring安全性提供的真正魔术, 可保护资源免遭未经身份验证的用户的侵害。
这是Spring Security提供的模块, 我们没有创建它。它还可以验证用户输入。
提供错误的凭证。
文章图片
如果我们提供了错误的登录凭据, 它将使用我们在spring-security.xml文件中提到的用户名和密码进行验证。
验证后, 如果登录凭据不正确, 则会引发错误消息。
文章图片
嗯, 在这个示例中, 我们已经看到了Spring Security的登录模块, 并且其验证方式与所提供的用户名和密码相对应。
在下一个主题中, 我们将实现进一步的逻辑, 例如:成功登录后呈现用户。
推荐阅读
- SQL Server AVG()函数
- handlerMapping的初始化以及查找handler
- Android数据存储——开源LitePal方法操作数据库
- ORM--Object/Relation Mapping 对象关系映射
- 第一行代码Android-------第二章控件部分
- Spring ApplicationListener配合-D实现参数初始化
- android五子棋游戏资讯阅读大学课程表地图拖拽检测小说搜索阅读app等源码
- Appium环境的安装以及一路上的坑
- android thread / udp socket sample