研究了好长的一段时间,终于可以开始更新了,只是个学习的过程,后期将持续更新Spring Security敬请期待。
首先做一些准备工作:
必备知识:spring springMVC mybatis mysql gradle 。。。。。
了解 :Security ;
如果您对ssm环境不了解,可以参考我的上一篇博文,gradle-分模块开发搭建SSM框架;
下面开始配置security环境,
//gradle配置外部属性
ext {
spring_version = "4.1.6.RELEASE"
spring_security_version ="3.2.9.RELEASE"
}
// spring security
compile "org.springframework.security:spring-security-web:$spring_security_version"
compile "org.springframework.security:spring-security-config:$spring_security_version"
到此,Spring Security环境添加完成。
使用java 配置Security:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true) //开启方法权限
public class SecurityConfig extends WebSecurityConfigurerAdapter {
static {
System.out.println(123);
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { //方法1
auth
.inMemoryAuthentication()
.withUser("user").password("user").roles("USER")
.and()
.withUser("admin").password("admin").roles("USER", "ADMIN");
}
//配置Spring Security的Filter链
@Override
public void configure(WebSecurity web) throws Exception { //方法2
web
.ignoring()
.antMatchers("/resources/**");
}
protected void configure(HttpSecurity http) throws Exception { //方法3
http
.authorizeRequests()
.antMatchers("/signup","/about").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.jsp")
.loginProcessingUrl("/j_spring_security_check")
.permitAll()
.and().logout().permitAll()
.and().csrf().disable();
}
我们来了解下配置文件:
首先我们的配置类继承了 WebSecurityConfigurerAdapter,然后通过方法重载 实现了几个方法
方法1:实现的是在内存中验证登录;
方法2:实现的是静态资源的过滤;
方法3:实现了好多的东西;
方法3 帮我们实现了自定义登录,和登录拦截等操作;
j_spring_security_check: 是我们要提交的action;
登录页面是 login.jsp;
security配置基本完事了。
好,我们在web 项目的webapps目录下新建login.jsp;
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/7/18
Time: 19:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Login Page</title>
<style>
.error {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
.msg {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
#login-box {
width: 300px;
padding: 20px;
margin: 100px auto;
background: #fff;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border: 1px solid #000;
}
</style>
</head>
<body onload='document.loginForm.username.focus();'>
<h1>Spring Security Custom Login Form (XML)</h1>
<div id="login-box">
<h2>Login with Username and Password</h2>
<c:if test="${not empty error}">
<div class="error">${error}</div>
</c:if>
<c:if test="${not empty msg}">
<div class="msg">${msg}</div>
</c:if>
<form name='loginForm' action="/j_spring_security_check" method='POST'>
<table>
<tr>
<td>User:</td>
<td><input type='text' name='username' value='admin'></td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password' value='admin'/></td>
</tr>
<tr>
<td colspan='2'><input name="submit" type="submit" value="submit" /></td>
</tr>
</table>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
</form>
</div>
</body>
</html>
到此,如果项目能够正常编译的话,说明我们搭建完成了。以上代码仅供参考 bye。
效果如下:
登录成功后: