Spring Security系列1:一个最基础的入门实例

一 简介

Spring Security是为基于Spring的应用程序提供的一种声明式安全性框架。它提供了一套完整的安全性解决方案,能够在Web请求级别方法调用级别处理身份认证和授权。

Spring Security可以从两个方面来解决安全性问题:

  1. 使用Servlet规范中的Filter保护Web请求并限制URL级别的访问

  2. 使用Spring AOP保护方法调用——借助于对象代理和使用通知,能够确保只有具备适当权限的用户才能方法安全保护的方法

下面我将简单介绍Spring Security的最基础的入门实例

二 Spring Security入门实例

(1)新建基于Spring MVC的Java Web项目:

导入Spring Security以及一些其他的spring相关的包之后,项目结构如下所示:

wKioL1ffQMXAaJpkAABMMI79GyA487.png

在这个测试项目中不需要再另写Java文件,同时也不涉及到数据库操作,实际上涉及到的文件只有:index.jsp、web.xml以及springmvc-servlet.xml文件

(2)web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>

	<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<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>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>

在这个web.xml中,除了定义的一些常规的Spring项目的配置之外,在文件的第30-38行定义了一个名为“springSecurityFilterChain”的filter,这个filter定义之后spring security保护web请求这个作用就开始生效了,spring security将会对请求的url进行拦截并判断其权限

(3)springmvc-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:context="http://www.springframework.org/schema/context"
	xmlns:security="http://www.springframework.org/schema/security"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
       					   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
       					   http://www.springframework.org/schema/context
       					   http://www.springframework.org/schema/context/spring-context-4.0.xsd
       					   http://www.springframework.org/schema/mvc 
       					   http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
       					   http://www.springframework.org/schema/security 
       					   http://www.springframework.org/schema/security/spring-security-4.1.xsd">

	<security:user-service id="userService">
		<security:user name="admin" password="admin"
			authorities="ROLE_USER,ROLE_ADMIN" />
		<security:user name="zifangsky" password="www.zifangsky.cn"
			authorities="ROLE_USER" />
	</security:user-service>

	<security:authentication-manager>
		<security:authentication-provider
			user-service-ref="userService" />
	</security:authentication-manager>

	<security:http pattern="/favicon.ico" security="none" />

	<security:http auto-config="true">
		<security:intercept-url pattern="/**"
			access="hasRole('ROLE_USER')" />
	</security:http>

	<context:component-scan base-package="cn.zifangsky.* *.controller" />

	<context:annotation-config />  <!-- 激活Bean中定义的注解 -->
	<mvc:annotation-driven />

	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/pages/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans>

在这个配置文件中,实际上34行及之后的那些配置都是跟SpringMVC相关的,而之前的那些配置则是在定义spring security的权限校验规则。

在第29-32行的配置中,“http”定义了一个Web相关的权限配置,同时“intercept-url”标签则配置了权限控制规则,即:网站根目录下的所有目录都需要有“ROLE_USER”的权限才允许访问。这将导致我们在访问首页的index.jsp文件都需要进行权限验证,也就是说程序运行之后就需要登录验证,验证通过之后才能访问首页及其他页面。当然,这个登录页面是spring security默认自带的,我在后面的文章中再说如何进行自定义这个登录页面

既然spring security需要验证访客的身份,那么就需要我们提供哪些用户具有哪些访问权限,也就是第22-25行配置的“authentication-manager”了,当然真正进行身份验证的是“authentication-provider”这个元素,从上面代码可以看出这里只是简单引用了一个采用硬编码的“user-service”,其里面定义了两个角色以及它们所对应的权限。

注:真正生产环境中,用户及其对应的权限这些信息是需要从数据库中读取的,这里为了理解方便就这样硬编码了

(4)index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<base href=#>

(5)运行测试:

运行项目之后,我们可以发现并没有直接出现首页,而是强制转到了一个默认的登录页面:

wKioL1ffQLOxtXvtAAAcGBDocHs387.png

然后输入上面定义的两组用户认证的其中一个,比如:admin/admin,然后就可以跳转到正常的首页中去了:

wKioL1ffQOWSs4NoAAAXnjWnAew054.png

至此,这个最基本的spring security入门实例到此就结束了。不过我将在后面的文章中进一步说明spring security的其他用法

参考文章:

本文出自 “zifangsky的个人博客” 博客,请务必保留此出处http://983836259.blog.51cto.com/7311475/1853887

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
本文主要介绍zabbix监控mysql的配置,包含使用zabbix自带模板监控mysql相关信息及自定义key监控mysql同步情况。 同时介绍了触发器的创建及 zabbix 通过邮件方式告警配置。 一、配置自带模板监控mysql 1. 提供配置文件模板 文件位置在源码包 /usr/local/src/zabbix-3.0.4/conf/zabbix_agentd/userparameter_mysql.conf #cp/usr/local/src/zabbix-3.0.4/conf/zabbix_age
一、inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系统的变化如文件修改、新增、删除等,并可以将相应的事件通知给应用程序。该机制由著名的桌面搜索引擎项目beagle引入用于替代此前具有类似功能但存在诸多缺陷的dnotify。 inotify既可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。此外,inotify 使用文件描
vSphere部署系列之11——vCenter权限管理 在前面的博文章节中已完成了整个vCenter运行环境的总体部署,接下来是有关运维方面的一些研究。这一章先讲一讲vCenter中的权限设置。 在vSphere中,权限由清单对象的用户或组和分配的角色组成,例如虚拟机或 ESX/ESXi主机。权限授予用户执行对象(向其分配了角色)上的角色所指定的活动的权限。 默认情况下,在全新安装中,只有用户administrator@vsphere.local 才具有vCenter Single Sign-On 服务器
DNS ( Domain Name System ,域名系统),因特网上作为域名和 IP 地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。通过主机名,最终得到该主机名对应的 IP 地址的过程叫做域名解析(或主机名解析)。 DNS 协议运行在 UDP 协议之上,使用端口号 53 。 主机名到 IP 地址的映射有两种方式: 1 )静态映射,每台设备上都配置主机到 IP 地址的映射,各设备独立维护自己的映射表,而且只供本设备使用; 2 )动态映射,建立
如题所示,生产服务器每天会产生很大的日志文件,为了不使硬盘被日志文件塞满,因此需要定期清理日志文件。这时我们可以写一个shell脚本用来清理某个路径下45天以前的日志,然后再设置一个定时任务每周定时执行这个脚本即可 (1)清理某个路径下的日志脚本delOldLogs.sh: [root@prx01cleanlog]#vim/usr/local/cleanlog/delOldLogs.sh #!/bin/sh#删除输入路径下的修改时间在45天以前的日志文件find$1-mtime+45-name"*log*
软 RAID 是在操作系统层面进行的 RAID 配置,也能对数据进行保护,实际生产环境中使用存储中磁盘阵列和硬 RAID 实现冗余的情况比较多。 此实验在虚拟机中完成,在系统中添加 5 块磁盘,每块磁盘 512MB ,利用这 5 块磁盘做 RAID5 实验 ,模拟磁盘损坏及替换磁盘,模拟停止 RAID 阵列及启动阵列,阵列中的数据情况。 1. 添加磁盘 ,每块磁盘 512MB ,共 5 块,如图 1 所示。 图 1 2. 启动系统并查看磁盘 ll /dev/sd* 出现 /dev/sdb,/dev/sdc
上一篇给大家分享了监控Nginx《 项目实战:创建模板,监控Nginx状态、服务信息 》,这里跟大家分享一下监控MySQL的记录,如果你没有安装MySQL可以参考我另一篇博文《 ubuntu安装配置LNMP 》,Let's go! Zabbix 监控 MySQL 数据库 一、客户端 Ubuntu 普通用户登录 1、 登陆 MySQL $ mysql -uroot -p Enter password: Welcome to the MySQL monitor.Commands end with ; or \
认真的测试过网上的大多数文章和版本,真正能一次性测试通过的文章太少了,需要反复的推敲,反复的查阅资料,才能真正的测试成功,所以,在此背景下,总结了Rsync,加上自己的理解分享出来; 1、 原理篇 Rsync,故名思议,是一个远程数据同步工具,可以镜像整个目录树和文件系统,也可以保持源文件的权限,时间和软硬链接,可以优化数据,文件重复数据的删除,也可以在LAN/WAN之间快速的同步多台主机的数据,这主要得益于Rsync的压缩和Rsync的核心算法,其算法,是本地和远程两台主机之间的文件达到同步并保持一致,
实战自制Linux操作系统 本文主要通过裁剪现有Linux系统,打造一个属于自己的Linux小系统,让其能够装载网卡驱动,并配置IP地址,实现网络功能。 自制linux系统 步骤概述: 1 、新建一个硬盘 2 、在该新硬盘上新建两个分区,一个当boot分区,一个当/分区 3 、格式化并且挂载两个分区 4 、安装grub至目标磁盘 5 、为grub提供配置文件 6 、复制内核文件和initrd文件 7 、创建目标主机根文件系统 8 、移植bash命令和其库文件到根文件系统 9 、装载模块,实现网络功能 10
Kickstart+PXE自动部署 目录: 无人值守安装简介 实战:PXE批量部署linux操作系统 前言 部署dhcp服务 HTTP服务 TFTP服务 复制PXE启动时需要的文件 修改引导启动菜单 配置kickstart自动安装文件(ks.cfg) 装机测试 无人值守安装简介 无人值守安装(Unattended Setup)指软件安装时无需任何用户干预,直接按默认或通过应答文件设置安装,这对于无特殊需求的用户或企业大批量部署安装操作系统及软件时非常方便。无人值守安装也称为静默安装,在安装过程中可以静默安