Spring Security基础:
1.
新建项目
导入jar包
新建各种包



2.
配置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都是固定的]



3.
WebSecurityConfig, 类似AppConfig,继承WebSecurityConfigurerAdapter,
重写userDetailsService()和configure(HttpSecurity http)方法
注解: 
@Configuration

@EnableWebSecurity // 开启web security支持:应用bean容器里的websecurityconfigurer


1>userDetailsService(),可通过InMemoryUserDetailsManager模拟简单用户[1],也可通过mybatis中mappers从数据库拿[2]
@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令牌,由于会话没有被发现。







Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐