Spring Security 安全 百度百科html
功能:Spring Security对Web安全性的支持大量地依赖于Servlet过滤器。这些过滤器拦截进入请求,而且在应用程序处理该请求以前进行某些安全处理。 Spring Security提供有若干个过滤器,它们可以拦截Servlet请求,并将这些请求转给认证和访问决策管理器处理,从而加强安全性。根据本身的须要,可使用适当的过滤器来保护本身的应用程序。
若是使用过Servlet过滤器且令其正常工做,就必须在Web应用程序的web.xml文件中使用<filter> 和<filter-mapping>元素配置它们。虽然这样作能起做用,可是它并不适用于使用依赖注入进行的配置。
FilterToBeanProxy是一个特殊的Servlet过滤器,它自己作的工做并很少,而是将本身的工做委托给Spring应用程序上下文 中的一个Bean来完成。被委托的Bean几乎和其余的Servlet过滤器同样,实现javax.servlet.Filter接 口,但它是在Spring配置文件而不是web.xml文件中配置的。
实际上,FilterToBeanProxy代理给的那个Bean能够是javax.servlet.Filter的任意实现。这能够是 Spring Security的任何一个过滤器,或者它能够是本身建立的一个过滤器。可是正如本书已经提到的那样,Spring Security要求至少配置四个并且可能一打或者更多的过滤器。java
总而言之:Spring Security 安全将咱们的服务器保护起来,访问任何资源都须要身份认证。配置filter,SpringBoot以及自动帮咱们配置好,咱们不用管,能够把Spring Security理解为一系列拦截器。git
整个项目基于github
JavaWeb-RESTful(二)_使用SpringMVC开发RESTful_下 传送门web
系列博文spring
项目已上传至guthub 传送门数据库
JavaWeb-SpringSecurity初认识 传送门安全
JavaWeb-SpringSecurity在数据库中查询登录用户 传送门服务器
JavaWeb-SpringSecurity自定义登录页面 传送门app
JavaWeb-SpringSecurity实现需求-判断请求是否以html结尾 传送门
JavaWeb-SpringSecurity自定义登录配置 传送门
JavaWeb-SpringSecurity图片验证ImageCode 传送门
JavaWeb-SpringSecurity记住我功能 传送门
JavaWeb-SpringSecurity使用短信验证码登录 传送门
在GaryRESTful.config下建立java安全适配器类SecurityConfig.java
配置SecurityConfig.java
//表单验证(身份认证) protected void configure(HttpSecurity http) throws Exception{ http.formLogin() .and() //请求受权 .authorizeRequests() //全部请求都被拦截,跳转到(/login请求中) .anyRequest() //都须要咱们身份认证 .authenticated(); }
package com.Gary.GaryRESTful.config; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; //Web应用安全适配器 @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter{ //表单验证(身份认证) protected void configure(HttpSecurity http) throws Exception{ http.formLogin() .and() //请求受权 .authorizeRequests() //全部请求都被拦截,跳转到(/login请求中) .anyRequest() //都须要咱们身份认证 .authenticated(); } }
spring Security 安全将咱们的服务器保护起来,访问任何资源都须要身份认证,配置filter,SpringBoot以及自动帮咱们配置好,咱们不用管,能够理解为一系列的拦截器(filter)
若是要设置本身用户登录的帐号密码时,Security5版本规定了不能使用明文作密码
咱们可使用Security5自带的PasswordEncoder作BCrypt加密设置
在SecurityConfig.java中配置加密规则
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
UserService中配置用户登录帐号密码
@Autowired private PasswordEncoder passwordEncoder; //spring security默认处理登录(username为输入的username) @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // TODO Auto-generated method stub System.out.println(username); return new User(username,passwordEncoder.encode("123456"),AuthorityUtils.commaSeparatedStringToAuthorityList("admin")); }
package com.Gary.GaryRESTful.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; //Web应用安全适配器 @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter{ //告诉SpringSecurity密码用什么加密的 @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } //表单验证(身份认证) protected void configure(HttpSecurity http) throws Exception{ http.formLogin() .and() //请求受权 .authorizeRequests() //全部请求都被拦截,跳转到(/login请求中) .anyRequest() //都须要咱们身份认证 .authenticated(); } }
package com.Gary.GaryRESTful.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; //用SprinSecurity默认的登录系统 //UserService要实现UserDetailsService接口 @Component public class UserService implements UserDetailsService{ @Autowired private PasswordEncoder passwordEncoder; //spring security默认处理登录(username为输入的username) @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // TODO Auto-generated method stub System.out.println(username); //用户名,密码,权限 //User实现UserDetails接口 return new User(username,passwordEncoder.encode("123456"),AuthorityUtils.commaSeparatedStringToAuthorityList("admin")); } }