• 基于注释的Spring Security实战


    一、准备工作

    预准备的工具及软件有:

    1. Eclipse IDE:我使用Eclipse JEE 3.7版,即eclipse-jee-indigo-SR2-win32-x86_64.zip

    2. JDK 7:我使用JDK 7u4版,即jdk-7u4-windows-x64.exe

    3. Spring Framework:我使用Spring Framework 3.1.2版,即spring-framework-3.1.2.RELEASE-with-docs.zip

    4. Spring Security:我使用Spring Security 3.1.2版,即spring-security-3.1.2.RELEASE-dist

    5. 其它JAR包:jstl-1.2.jar,commons-logging-1.1.1.jar,cglib-nodep-2.2.jar

    6. Tomcat应用服务器:我使用Tomcat 7.0.29版,即apache-tomcat-7.0.29-windows-x64.zip

    说明:

    1. Eclipse IDE和JDK 7的版本可以更高一些,不影响开发和调试。

    2. Eclipse一定要下载JEE版。

    3. Eclipse、JDK和Tomcat的安装过程省略。

    4. 我的操作系统是64位版本,故开发环境对应的工具都是下载64位的安装包。

    二、新建项目

    在Eclipse环境下新建Dynamic Web Project。

    项目名为:SpringSecurityDemo,

    Target runtime选择New Runtime,然后选择Apache Tomcat v7.0,并设置好Tomcat的安装目录。

    连续点击两次Next,在“Generate web.xml deployment descriptor”处打勾选择,并点击Finish。

    三、添加库文件

    把下列JAR文件添加到项目的WebContentWEB-INFlib目录下。

    四、业务层开发

    1. 在项目src处,新建com.ch.configuration包,并新建WebConfig.java类,内容如下:


     
    1. package com.ch.configuration;  
    2.   
    3. import org.springframework.context.annotation.Bean;  
    4. import org.springframework.context.annotation.ComponentScan;  
    5. import org.springframework.context.annotation.Configuration;  
    6. import org.springframework.context.annotation.ImportResource;  
    7. import org.springframework.web.servlet.ViewResolver;  
    8. import org.springframework.web.servlet.config.annotation.EnableWebMvc;  
    9. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;  
    10. import org.springframework.web.servlet.view.InternalResourceViewResolver;  
    11.   
    12. @EnableWebMvc  
    13. @Configuration  
    14. @ComponentScan(basePackages = "com.jverstry")  
    15. @ImportResource("/WEB-INF/MyServlet-security.xml")  
    16. public class WebConfig extends WebMvcConfigurerAdapter {  
    17.   
    18.     @Bean  
    19.     public ViewResolver getViewResolver() {  
    20.         InternalResourceViewResolver resolver = new InternalResourceViewResolver();  
    21.         resolver.setPrefix("WEB-INF/pages/");  
    22.         resolver.setSuffix(".jsp");  
    23.   
    24.         return resolver;  
    25.     }  
    26.   
    27. }  

    2. 新建com.ch.configuration.controller包,并新建MyController.java类,内容如下:


     
    1. package com.ch.configuration.controller;  
    2.   
    3. import com.ch.configuration.service.MyService;  
    4.   
    5. import org.springframework.beans.factory.annotation.Autowired;  
    6. import org.springframework.stereotype.Controller;  
    7. import org.springframework.ui.Model;  
    8. import org.springframework.web.bind.annotation.RequestMapping;  
    9.   
    10. @Controller  
    11. public class MyController {  
    12.   
    13.     private MyService myService;  
    14.   
    15.     @Autowired  
    16.     public void setMyService(MyService myService) {  
    17.         this.myService = myService;  
    18.     }  
    19.   
    20.     @RequestMapping(value = "/")  
    21.     public String home() {  
    22.         return "index";  
    23.     }  
    24.   
    25.     @RequestMapping(value = "/getTime")  
    26.     public String helloWorld(Model model) {  
    27.         model.addAttribute("TimeIs", myService.getCurrentTimeInMilliseconds());  
    28.         return "getTime";  
    29.     }  
    30.   
    31. }  

    3. 新建com.ch.configuration.service包,并新建MyService.java接口类,内容如下:


    1. package com.ch.configuration.service;  
    2.   
    3. public interface MyService {  
    4.     long getCurrentTimeInMilliseconds();  
    5. }  

    4. 在com.ch.configuration.service包新建MyServiceImpl.java类,内容如下:


     
    1. package com.ch.configuration.service;  
    2.   
    3. public class MyServiceImpl implements MyService {  
    4.   
    5.     @Override  
    6.     public long getCurrentTimeInMilliseconds() {  
    7.         return System.currentTimeMillis();  
    8.     }  
    9.   
    10. }  

    5. 在com.ch.configuration.service包新建MyServicesConfiguration.java类,内容如下:

     
    package com.ch.configuration.service;  
      
    import org.springframework.context.annotation.Bean;  
    import org.springframework.context.annotation.Configuration;  
      
    @Configuration  
    public class MyServicesConfiguration {  
      
        private MyService myService = new MyServiceImpl();  
      
        @Bean  
        public MyService getMyService() {  
            return myService;  
        }  
      
    }  

    五、前台页面层开发

    1. 在WebContentWEB-INF目录新建pages文件夹,接着在pages目录下新建getTime.jsp文件,内容如下:


     
    1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
    2.     pageEncoding="UTF-8"%>  
    3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
    4. >  
    5. <html>  
    6. <head>  
    7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    8. <title>Get Time !!!title>  
    9. head>  
    10. <body>  
    11.     The time in milliseconds is:  
    12.     <c:out value="${TimeIs}" />  
    13.     !  
    14. body>  
    15. html>  

    2. 在pages目录下新建index.jsp文件,内容如下:


     
    1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
    2.     pageEncoding="UTF-8"%>  
    3. >  
    4. <html>  
    5. <head>  
    6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    7. <title>Welcome !!!title>  
    8. head>  
    9. <body>  
    10.     <h1>Welcome To Spring MVC With Annotations !!!h1>  
    11.     <h1>(with login...)h1>  
    12. body>  
    13. html>  

    3. 修改WEB-INF下的web.xml文件,内容如下:


     
    1. xml version="1.0" encoding="UTF-8"?>  
    2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    3.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
    4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
    5.     id="WebApp_ID" version="3.0">  
    6.     <display-name>SpringSecurityDemodisplay-name>  
    7.     <context-param>  
    8.         <param-name>contextClassparam-name>  
    9.         <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContextparam-value>  
    10.     context-param>  
    11.   
    12.     <context-param>  
    13.         <param-name>contextConfigLocationparam-name>  
    14.         <param-value>com.ch.configurationparam-value>  
    15.     context-param>  
    16.   
    17.     <filter>  
    18.         <filter-name>springSecurityFilterChainfilter-name>  
    19.         <filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>  
    20.     filter>  
    21.   
    22.     <filter-mapping>  
    23.         <filter-name>springSecurityFilterChainfilter-name>  
    24.         <url-pattern>/*url-pattern>  
    25.     filter-mapping>  
    26.   
    27.     <listener>  
    28.         <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>  
    29.     listener>  
    30.   
    31.     <servlet>  
    32.         <servlet-name>MyServletservlet-name>  
    33.         <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>  
    34.         <init-param>  
    35.             <param-name>contextConfigLocationparam-name>  
    36.             <param-value>param-value>  
    37.         init-param>  
    38.         <load-on-startup>1load-on-startup>  
    39.     servlet>  
    40.   
    41.     <servlet-mapping>  
    42.         <servlet-name>MyServletservlet-name>  
    43.         <url-pattern>/url-pattern>  
    44.     servlet-mapping>  
    45.   
    46.     <welcome-file-list>  
    47.         <welcome-file>welcome-file>  
    48.     welcome-file-list>  
    49. web-app>  

    4. 在WEB-INF下新建MyServlet-security.xml文件,内容如下:


     
    1. <beans:beans xmlns="http://www.springframework.org/schema/security"  
    2.     xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    3.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
    4.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    5.     http://www.springframework.org/schema/security  
    6.     http://www.springframework.org/schema/security/spring-security-3.1.xsd">  
    7.   
    8.     <http auto-config="true">  
    9.         <intercept-url pattern="/*" access="ROLE_USER" />  
    10.     http>  
    11.   
    12.     <authentication-manager alias="authenticationManager">  
    13.         <authentication-provider>  
    14.             <user-service>  
    15.                 <user authorities="ROLE_USER" name="guest" password="guest" />  
    16.             user-service>  
    17.         authentication-provider>  
    18.     authentication-manager>  
    19.   
    20. beans:beans>  

    至此,Demo项目的开发已经完成。项目的整体结构图如图所示:



    六、部署和运行

    1. 在Eclipse选择项目SpringSecurityDemo,右键选择“Run As”,再选择“Run on Server”,选择Apache Tomcat v7.0,Eclipse IDE自动完成部署并运行。

    在浏览器上输入地址:http://localhost:8080/SpringSecurityDemo/

    显示如下:

    注:地址自动被重定向到http://localhost:8080/SpringSecurityDemo/spring_security_login

    User/Password输入guest/guest,显示:

    如果输入错误,显示:

    OK!本文就到这里,对于Spring的注释,可以参考官方文档加以理解。

     
  • 相关阅读:
    利用runtime检測这个对象是否存在某属性?
    Android Studio 使用 SVN 必然遇到问题:commit ** File out of data 问题解决方法
    JPA測试实例
    pat(A) 1063. Set Similarity(STL)
    @Override用在哪儿
    Highcharts数据表示(3)
    #pragma pack (n) 惹的祸
    C++二阶构造函数
    使用自定义的控件
    C++ explicit
  • 原文地址:https://www.cnblogs.com/jokerjason/p/6000176.html
Copyright © 2020-2023  润新知