SpringSecurity笔记一
来源:互联网 发布:vb sleep函数 编辑:程序博客网 时间:2024/05/21 19:34
Spring Security基础:
1.
新建项目
导入jar包
新建各种包
配置web.xml
servlet:
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 用哪种容器类 -->
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<!-- 入口配置 -->
<param-name>contextConfigLocation</param-name>
<param-value>com.bliss.springsecurity.config.AppConfig</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
filter:
<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>
[以上的name都是固定的]
WebSecurityConfig, 类似AppConfig,继承WebSecurityConfigurerAdapter,
重写userDetailsService()和configure(HttpSecurity http)方法
注解:
@Configuration
@Bean
@Override
protected UserDetailsService userDetailsService(){...}
[1]模拟user普通用户和admin管理员,设置密码和权限
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User
.withUsername("user")
.password("123456")
.roles("USER").build());
manager.createUser(User
.withUsername("admin")
.password("admin")
.roles("ADMIN").build());
[2]重新创建一个UserDetailsServiceImpl类,继承UserDetailsService类,
重写loadUserByUsername()方法
当spring security需要用户详情时就调用此方法,需要传入用户名
方法中调用mybatis的mappers方法,访问数据库,
通过继承了org.springframework.security.core.userdetails.User的实体类的父类构造函数super()
进行校验
2>configure(HttpSecurity http) 类似filter,通过http.authorizeRequests()配置权限,进行授权
其中要注意
地址匹配顺序(从上往下):越具体的放上面,否则下面的没有机会匹配
*:可按照try{}catch(){}中错误顺序理解
eg.允许访问静态资源,对admin下的文件进行role授权,对其他文件进行登录授权
http.authorizeRequests()
.antMatchers("/assets/**").permitAll() // 允许静态资源通过
.antMatchers("/admin/**").hasRole("ADMIN") // Role 角色
.antMatchers("/**").authenticated().and() // authenticated 认证
.formLogin() // 注意地址匹配顺序(从上往下):越具体的放上面,否则下面的没有机会匹配
;
地址分区
表单登录
3>附加:passwordencoder // 密码加密
通过BCryotPasseordEncoder()
spring security 自动防护CSRF,我们只要要配合他就好,在每一个表单中加入一个taken
CSRF(Cross-site request forgery)跨站请求伪造
eg.
<!-- spring security默认开启CSRF防护,所以所有POST表单都必须包含csrf.token -->
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
302 Found // 重定向
403 Forbidden // 没有权限,无法验证提供的CSRF令牌,由于会话没有被发现。
1.
新建项目
导入jar包
新建各种包
配置web.xml
servlet:
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 用哪种容器类 -->
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<!-- 入口配置 -->
<param-name>contextConfigLocation</param-name>
<param-value>com.bliss.springsecurity.config.AppConfig</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
filter:
<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>
[以上的name都是固定的]
WebSecurityConfig, 类似AppConfig,继承WebSecurityConfigurerAdapter,
重写userDetailsService()和configure(HttpSecurity http)方法
注解:
@Configuration
@EnableWebSecurity // 开启web security支持:应用bean容器里的websecurityconfigurer
@Bean
@Override
protected UserDetailsService userDetailsService(){...}
[1]模拟user普通用户和admin管理员,设置密码和权限
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User
.withUsername("user")
.password("123456")
.roles("USER").build());
manager.createUser(User
.withUsername("admin")
.password("admin")
.roles("ADMIN").build());
[2]重新创建一个UserDetailsServiceImpl类,继承UserDetailsService类,
重写loadUserByUsername()方法
当spring security需要用户详情时就调用此方法,需要传入用户名
方法中调用mybatis的mappers方法,访问数据库,
通过继承了org.springframework.security.core.userdetails.User的实体类的父类构造函数super()
进行校验
2>configure(HttpSecurity http) 类似filter,通过http.authorizeRequests()配置权限,进行授权
其中要注意
地址匹配顺序(从上往下):越具体的放上面,否则下面的没有机会匹配
*:可按照try{}catch(){}中错误顺序理解
eg.允许访问静态资源,对admin下的文件进行role授权,对其他文件进行登录授权
http.authorizeRequests()
.antMatchers("/assets/**").permitAll() // 允许静态资源通过
.antMatchers("/admin/**").hasRole("ADMIN") // Role 角色
.antMatchers("/**").authenticated().and() // authenticated 认证
.formLogin() // 注意地址匹配顺序(从上往下):越具体的放上面,否则下面的没有机会匹配
;
地址分区
表单登录
3>附加:passwordencoder // 密码加密
通过BCryotPasseordEncoder()
4.补充:
<c:url>构造地址;spring security 自动防护CSRF,我们只要要配合他就好,在每一个表单中加入一个taken
CSRF(Cross-site request forgery)跨站请求伪造
eg.
<!-- spring security默认开启CSRF防护,所以所有POST表单都必须包含csrf.token -->
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
302 Found // 重定向
403 Forbidden // 没有权限,无法验证提供的CSRF令牌,由于会话没有被发现。
阅读全文
0 0
- SpringSecurity学习笔记一
- SpringSecurity笔记一
- SpringSecurity学习笔记(一) 核心类与接口
- springsecurity学习(一)
- SpringSecurity应用(一)
- SpringSecurity应用(一)
- springSecurity应用(一)
- SpringSecurity学习(一)
- java笔记:SpringSecurity应用
- java笔记:SpringSecurity应用
- SpringSecurity笔记二
- [置顶] SpringSecurity 源码分析一
- SpringSecurity源码学习(一)
- SpringSecurity 源码解读(一)
- SpringSecurity的基本原理(一)
- SpringSecurity笔记3-Securing Methods
- Spring学习笔记-C9-SpringSecurity
- SpringSecurity 学习记录(一)- SpringSecurity 主要的实现类
- IT与风投
- 工作区指南(Workspaces Guide)
- VB.net 使用LINQ对datatable对象进行查询
- 多维字符串
- 3-11·RHEL7&CentOS7服务命令
- SpringSecurity笔记一
- 软件工程之面向对象技术
- 51Nod 1283 最小周长
- spring-mybatis实现简单模糊查询
- pyshp创建shp点文件
- 颜色转换助手RGB888-565
- 深入理解java虚拟机学习笔记(四)
- 购物车二级列表演示
- 对Android中的Cursor一些浅显见解