本文非常非常长,希望大家有足够时间及耐心阅读,直接复制代码跑通程序大概也得半个钟,框架使用简单,配置多
废话不说,直接做,做完就懂了,不懂再做一遍,培养动手能力
一、导入jar包(此处只导入Spring security相关jar包) 本次测试使用SSM框架测试
<spring.version>5.0.10.RELEASE</spring.version>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.version}</version>
</dependency>
二、配置web.xml:过滤器最好放在其他过滤器的最前面
<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>
三、创建spring-security.xml(需要在applicationContext.xml文件中导入),
配置文件中多处引用我们自己创建的类,后续有图描述,可以直接下拉到第十二个标题,现在位置是第三个标题
导入语句:<import resource="spring-security.xml"/> <!-- 漏导入会报NoBeanspringSecurityFilterChain这个错误 -->
<?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:sec="http://www.springframework.org/schema/security"
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/security
http://www.springframework.org/schema/security/spring-security-4.2.xsd ">
<!--扫描-->
<context:component-scan base-package="com.it.security"/>
<!--允许代码上使用注解(3种类型都可以,我们常用的是pre-post-annotations),
由于这个文件导入父容器,所以springmvc可以使用父容器的配置,会自动扫描controller上的注解-->
<sec:global-method-security
secured-annotations="enabled" jsr250-annotations="enabled" pre-post-annotations="enabled"/>
<!-- 静态资源,不用权限 -->
<sec:http pattern="/resources/**" security="none"/>
<sec:http pattern="/verify/**" security="none"/>
<sec:http pattern="/login" security="none"/>
<sec:http pattern="/user/register.*" security="none"/>
<sec:http pattern="/favicon.ico" security="none"/>
<!--<sec:http pattern="/logindo" security="none"/>注意千万不要在静态资源这里设置登录提交网址,会让请求无法进入spring security体系-->
<!--这里设置请求,包括路径拦截,登录,登出配置等-->
<sec:http use-expressions="true" auto-config="true" entry-point-ref="authenticationProcessingFilterEntryPoint">
<sec:headers>
<sec:frame-options policy="SAMEORIGIN"/>
</sec:headers>
<!--路径拦截设置-->
<sec:intercept-url pattern="/**" access="permitAll"/>
<!--登录参数设置-->
<!--
1.登陆失败跳转页面
2.form表单的账号标签name
3.form表单的密码标签name
4.form表单提交的请求url,一定要与html标签的值一致,如果控制器有写RequestMapping注解,请填上
5.登陆成功后跳转的页面
6.登陆完后是否跳转到target-url,false代表调回上一个页面
7.自定义登录成功类
8.自定义登录失败类
定义7和8 之后,5和6就废了,可以删除亦可保留
-->
<sec:form-login login-page="/member/login"
username-parameter="loginname"
password-parameter="loginpwd"
login-processing-url="/member/yy"
default-target-url="/member/my"
always-use-default-target="false"
authentication-success-handler-ref