Spring Security身份认证之HelloSpringSecurity(附源码)

简介:

    在上一篇文档中,对Spring Security中的身份认证的流程和管理进行了详细介绍,本文将从实践的角度告诉大家如何使用最简便的方式用Spring Security进行身份验证。


    开发环境如下:

    JDK 1.7

    Tomcat 7

    Eclipse 

    Spring Security 3.2.5

    

    项目目录结构如下:


wKiom1TAYmXSnIpFAAGNOsTljug259.jpg


    1.新建Maven Project,对Maven不熟悉的童鞋请自行充电,现在这个念头不学习Maven绝对是不行的。


wKioL1TAX7KRtrmRAAIaDlk0914608.jpg


    2. 在Pom.xml添加相关jar依赖。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
< 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.favccxx.favsecurity</ groupId
   < artifactId >HelloSpringSecurity</ artifactId
   < packaging >war</ packaging
   < version >0.0.1-SNAPSHOT</ version >  
   < name >HelloSpringSecurity Maven Webapp</ name >
   < url >http://maven.apache.org</ url >
   
     < properties >
           < spring.version >3.2.8.RELEASE</ spring.version >
   </ properties >
   
   < dependencies >   
     < dependency >    
       < groupId >junit</ groupId >  
       < artifactId >junit</ artifactId >
       < version >3.8.1</ version >
       < scope >test</ scope >
     </ dependency
     
     
     < dependency >
         < groupId >org.springframework</ groupId >
         < artifactId >spring-core</ artifactId >
         < version >${spring.version}</ version >
     </ dependency >
     < dependency >
         < groupId >org.springframework</ groupId >
         < artifactId >spring-webmvc</ artifactId >
         < version >${spring.version}</ version >
     </ dependency >
     < dependency >
         < groupId >org.springframework</ groupId >
         < artifactId >spring-beans</ artifactId >
         < version >${spring.version}</ version >
     </ dependency >
     < dependency >
         < groupId >org.springframework</ groupId >
         < artifactId >spring-context</ artifactId >
         < version >${spring.version}</ version >
     </ dependency >
     < dependency >
         < groupId >org.springframework</ groupId >
         < artifactId >spring-aop</ artifactId >
         < version >${spring.version}</ version >
     </ dependency >
     < dependency >
         < groupId >org.springframework</ groupId >
         < artifactId >spring-tx</ artifactId >
         < version >${spring.version}</ version >
     </ dependency >
<!--    <dependency> -->
<!--        <groupId>org.springframework</groupId> -->
<!--        <artifactId>spring-test</artifactId> -->
<!--        <version>${spring.version}</version> -->
<!--    </dependency> -->
     < dependency >
         < groupId >org.freemarker</ groupId >
         < artifactId >freemarker</ artifactId >
         < version >2.3.20</ version >
     </ dependency >
     < dependency >
         < groupId >org.springframework</ groupId >
         < artifactId >spring-orm</ artifactId >
         < version >${spring.version}</ version >
     </ dependency >
     
     
      < dependency
         < groupId >org.springframework.security</ groupId >
         < artifactId >spring-security-web</ artifactId >
         < version >3.2.5.RELEASE</ version
       </ dependency
       < dependency >
         < groupId >org.springframework.security</ groupId >
         < artifactId >spring-security-config</ artifactId >
         < version >3.2.5.RELEASE</ version >
       </ dependency >
        
       < dependency >
            < groupId >jstl</ groupId >
            < artifactId >jstl</ artifactId >
            < version >1.2</ version >
        </ dependency >
   </ dependencies >
   < build >
     < finalName >HelloSpringSecurity</ finalName >
   </ build >
</ project >


    3. 配置web.xml,在容器启动时加载Spring MVC的配置文件与Spring Security的配置文件。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< web-app  id = "helloSpringSecurity"  version = "2.4"  xmlns = "http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
     < display-name >Hello Spring Security</ display-name >
     
     < context-param >
         < param-name >contextConfigLocation</ param-name >
         < param-value >
             classpath:springSecurity.xml
         </ param-value >
     </ context-param >
     
     < 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 >
      
      < servlet >
         < servlet-name >springMVC</ servlet-name >
         < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class >
          < init-param >
              < param-name >contextConfigLocation</ param-name >
              < param-value >classpath:spring-context.xml</ param-value >
         </ init-param >
         < load-on-startup >1</ load-on-startup >
     </ servlet >
     < servlet-mapping >
         < servlet-name >springMVC</ servlet-name >
         < url-pattern >/</ url-pattern >
     </ servlet-mapping >
 
</ web-app >


    4. SpringSecurity.xml配置文件如下


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<? 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:security = "http://www.springframework.org/schema/security"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
         http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">
 
     < security:http  auto-config = "true" >
         < security:intercept-url  pattern = "/admin"  access = "ROLE_ADMIN" />
         < security:intercept-url  pattern = "/confidential"  access = "ROLE_SUPERADMIN" />
     </ security:http >
     
     
     < security:authentication-manager >
         < security:authentication-provider >
             < security:user-service >
                 < security:user  name = "favccxx"  password = "favccxx"  authorities = "ROLE_USER,ROLE_ADMIN" />
                 < security:user  name = "super"  password = "super"  authorities = "ROLE_SUPERADMIN" />
             </ security:user-service >
         </ security:authentication-provider
     </ security:authentication-manager >
     
</ beans >


    5.spring-context.xml配置文件如下


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<? 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:mvc = "http://www.springframework.org/schema/mvc"
     xsi:schemaLocation="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-3.2.xsd
         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
 
     < mvc:annotation-driven ></ mvc:annotation-driven >
     
     < context:component-scan  base-package = "com.favccxx.favsecurity.web" ></ context:component-scan >
     
     < bean  id = "viewResolver"
         class = "org.springframework.web.servlet.view.UrlBasedViewResolver" >
         < property  name = "viewClass"
             value = "org.springframework.web.servlet.view.JstlView"  />
         < property  name = "prefix"  value = "/WEB-INF/views"  />
         < property  name = "suffix"  value = ".jsp"  />
     </ bean >
 
</ beans >


    6. 新建HelloSpringSecurityController.java文件,代码如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package  com.favccxx.favsecurity.web;
 
import  org.springframework.stereotype.Controller;
import  org.springframework.web.bind.annotation.RequestMapping;
import  org.springframework.web.bind.annotation.RequestMethod;
import  org.springframework.web.servlet.ModelAndView;
 
@Controller
public  class  HelloSpringSecurityController {
     
     @RequestMapping ( "/hello" )
     public  ModelAndView hello(){
         ModelAndView mav =  new  ModelAndView();
         mav.addObject( "title" "Welcome - Spring Security Hello World" );
         mav.addObject( "message" "This is welcome page!" );
         mav.setViewName( "/hello" );
         return  mav;
     }
     
     @RequestMapping (value = {  "/" "/welcome"  }, method = RequestMethod.GET)
      public  ModelAndView welcome() {
         ModelAndView mav =  new  ModelAndView();
         mav.addObject( "title" "Welcome - Spring Security Hello World" );
         mav.addObject( "message" "This is welcome page!" );
         mav.setViewName( "/hello" );
         return  mav;
      }
     
      @RequestMapping (value =  "/admin" , method = RequestMethod.GET)
           public  ModelAndView admin() {
       
               ModelAndView mav =  new  ModelAndView();
               mav.addObject( "title" "Admin - Spring Security Hello World" );
               mav.addObject( "message" "This is protected page!" );
               mav.setViewName( "/admin" );
              return  mav;
      
         }
      
      }
 
}


    7. 在/WEB-INF/views文件夹下分别创建admin.jsp和hello.jsp


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>    
<!DOCTYPE html>
< html >
< head >
< meta  http-equiv = "Content-Type"  content = "text/html; charset=UTF-8" >
< title >${title}</ title >
</ head >
< body >
     < h1 >Title : ${title}</ h1 >
     < h1 >Message : ${message}</ h1 >
     < c:if  test = "${pageContext.request.userPrincipal.name != null}" >
         < h2 >
              Welcome : ${pageContext.request.userPrincipal.name} | < a  href = "<c:url value=" /j_spring_security_logout" />"> Logout</ a >
         </ h2 >
     </ c:if >  
</ body >
</ html >


1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
< meta  http-equiv = "Content-Type"  content = "text/html; charset=UTF-8" >
< title >${title}</ title >
</ head >
< body >
     < h1 >Title:${title}</ h1 >
     < h1 >Message:${message}</ h1 >
</ body >
</ html >


    8. 系统运行效果图如下


wKiom1TAYYzRUp5pAAFnGxlExwo893.jpg

wKioL1TAYmSRjfnQAAEXAbGEuwE726.jpg

wKiom1TAYY2Cl1oaAAG_KHPe-pQ373.jpg


    备注:猛击此处下载源代码





本文转自 genuinecx 51CTO博客,原文链接:http://blog.51cto.com/favccxx/1606889,如需转载请自行联系原作者
目录
相关文章
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
2379 5
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
659 70
|
8月前
|
设计模式 Java 开发者
如何快速上手【Spring AOP】?从动态代理到源码剖析(下篇)
Spring AOP的实现本质上依赖于代理模式这一经典设计模式。代理模式通过引入代理对象作为目标对象的中间层,实现了对目标对象访问的控制与增强,其核心价值在于解耦核心业务逻辑与横切关注点。在框架设计中,这种模式广泛用于实现功能扩展(如远程调用、延迟加载)、行为拦截(如权限校验、异常处理)等场景,为系统提供了更高的灵活性和可维护性。
1002 0
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
497 2
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
588 7
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
335 0
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
362 2
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
1120 1
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
507 9
下一篇
开通oss服务