zoukankan      html  css  js  c++  java
  • Spring Security入门

    创建工程spring-security-demo ,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>cn.itcast.demo</groupId>
    	<artifactId>spring-security-demo</artifactId>
    	<packaging>war</packaging>
    	<version>0.0.1-SNAPSHOT</version>
    	<properties>
    		<spring.version>4.2.4.RELEASE</spring.version>
    	</properties>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-core</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-web</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-context-support</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-test</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.security</groupId>
    			<artifactId>spring-security-web</artifactId>
    			<version>4.1.0.RELEASE</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.security</groupId>
    			<artifactId>spring-security-config</artifactId>
    			<version>4.1.0.RELEASE</version>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>servlet-api</artifactId>
    			<version>2.5</version>
    			<scope>provided</scope>
    		</dependency>
    	</dependencies>
    	<build>
    	  <plugins>		
    	      <!-- java编译插件 -->
    		  <plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.2</version>
    				<configuration>
    					<source>1.7</source>
    					<target>1.7</target>
    					<encoding>UTF-8</encoding>
    				</configuration>
    		  </plugin>      
    	      <plugin>
    				<groupId>org.apache.tomcat.maven</groupId>
    				<artifactId>tomcat7-maven-plugin</artifactId>
    				<configuration>
    					<!-- 指定端口 -->
    					<port>9090</port>
    					<!-- 请求路径 -->
    					<path>/</path>
    				</configuration>
    	  	  </plugin>
    	   </plugins>  
        </build>
    </project>
    

      创建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_2_5.xsd"
    	version="2.5">		
      	 <context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:spring-security.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>	
    </web-app>
    

      (3)创建index.html 

    (4)创建spring 配置文件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.xsd
    						http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">
    
    	<!-- 页面拦截规则 -->
    	<http use-expressions="false">
          <!-- /**包括子目录  /*只包含根目录,不包含子目录 -->
    		<intercept-url pattern="/**" access="ROLE_USER" />
    		<form-login/>	
    	</http>
    
    	<!-- 认证管理器 -->
    	<authentication-manager>
    		<authentication-provider>
    			<user-service>
    				<user name="admin" password="123456" authorities="ROLE_USER"/>
    			</user-service>		
    		</authentication-provider>	
    	</authentication-manager>
    </beans:beans>
    

      

    intercept-url 表示拦截页面  

    /*  表示的是该目录下的资源,只包括本级目录不包括下级目录

    /** 表示的是该目录以及该目录下所有级别子目录的资源

    form-login  为开启表单登陆

    use-expressions 为是否使用使用 Spring 表达式语言( SpEL ),默认为true ,如果开启,则拦截的配置应该写成以下形式

    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
    

      用户自定义登录页

    (1)构建登陆页:

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登陆</title>
    </head>
    <body>	
    	<form action='/login' method='POST'>
    		<table>
    			<tr>
    				<td>用户名:</td>
    				<td><input type='text' name='username' value=''></td>
    			</tr>
    			<tr>
    				<td>密码:</td>
    				<td><input type='password' name='password' /></td>
    			</tr>
    			<tr>
    				<td colspan='2'><input name="submit" type="submit"
    					value="登陆" /></td>
    			</tr>
    		</table>
    	</form>
    </body>
    </html>
    

      (2)构建登陆失败页  login_error.html

    (3)修改 spring 配置文件spring-security.xml 

    <!-- 以下页面不被拦截 -->
    	<http pattern="/login.html" security="none"></http>
    	<http pattern="/login_error.html" security="none"></http>
    	<!-- 页面拦截规则 -->
    	<http use-expressions="false">
    		<intercept-url pattern="/*" access="ROLE_USER" />
    		<form-login login-page="/login.html" default-target-url="/index.html" authentication-failure-url="/login_error.html"/>	
    		<csrf disabled="true"/>
    	</http>
    

      security="none"  设置此资源不被拦截. 
    如果你没有设置登录页security="none"  ,将会出现以下错误

    因为登录页会被反复重定向。

    login-page:指定登录页面。
    authentication-failure-url:指定了身份验证失败时跳转到的页面。
    default-target-url:指定了成功进行身份验证和授权后默认呈现给用户的页面。

    csrf disabled="true"  关闭csrf ,如果不加会出现错误

    CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,

    通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

  • 相关阅读:
    Golang Failpoint 的设计与实现
    没涉及到最值求解;观点:矩阵乘法无法表达出结果。 现实生活中事件、现象的数学表达
    多元微分学 枚举破解15位路由器密码 存储空间限制 拆分减长,求最值 数据去重
    ARP Poisoning Attack and Mitigation Techniques ARP欺骗 中间人攻击 Man-In-The-Middle (MITM) attack 嗅探 防范 Can one MAC address have two different IP addresses within the network?
    The C10K problem
    HTTP Streaming Architecture HLS 直播点播 HTTP流架构
    现代IM系统中消息推送和存储架构的实现
    现代IM系统中的消息系统架构
    长连接锁服务优化实践 C10K问题 nodejs的内部构造 limits.conf文件修改 sysctl.conf文件修改
    doubleclick cookie、动态脚本、用户画像、用户行为分析和海量数据存取 推荐词 京东 电商 信息上传 黑洞 https://blackhole.m.jd.com/getinfo
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/12496739.html
Copyright © 2011-2022 走看看