码迷,mamicode.com
首页 > 编程语言 > 详细

spring Security项目快速搭建

时间:2020-02-08 17:49:06      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:https   logo   结束   初始   protect   version   pid   extend   auth   

spring Security的底层原理就是拦截器链。在上一篇文章使用注解方式搭建spring项目中,

可以自定义一套拦截器,拦截实现spring提供的HandlerInterceptr接口,然后实现三个拦截器方法,

在prexxx方法中定义验证逻辑。拦截器定义好后在servletContext容器的配置类中注入进来再进行注册。就可以使用。

这是基于session进行认证授权的方式。

 

spring Security为我们提供了认证授权的框架。下面大概上说明一下怎么快速搭建一个spring Security项目。

1 创建maven工程

2 pom依赖,加上spring Security的相关依赖

    <dependency>

      <groupId>org.springframework.security</groupId>

      <artifactId>spring-security-web</artifactId>

      <version>5.1.5.RELEASE</version>

    </dependency>

    <dependency>

      <groupId>org.springframework.security</groupId>

      <artifactId>spring-security-config</artifactId>

      <version>5.1.5.RELEASE</version>

    </dependency>

3 和上篇文章一样,创建两个配置文件 ,一个是spring容器相当于applicationContext.xml,

   一个是servletContext容器,向当与springmvc.xml.这里面不用注册自己的拦截器。

4 加载spring容器

5 安全配置 在配置包下定义

@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigAdapetor{

  //配置用户信息服务

  @Bean

  public UserDetailsService userDetailsService(){

    InMemoryUserDetailManger manger = new InMemoryUserDetailManger();

    manger,createUser(User.withUsername("zhangsan").password("111").authorities("a1","a2").build()));

    manger,createUser(User.withUsername("lisi").password("222").authorities("b1","b2").build()));

    return manger ;

  } 

  //定义密码编码器

  @Bean

  public PasswordEncoder passwordEncoder(){

    return noOpPasswordEncoder .getIntance() ;

  } 

  //定义安全拦截机制

  @Bean

  protected void configure(HttpSecurity http) throws Exception{

    http.authorizeRequests()

    .antMatchers("/r/**").authenticated()

    .anyRequest().permitAll()

    .and()

    .formLogin()

    .sucessFowardUrl("/login-sucess");

  } 

}

6 在加载类中加载此配置

  在getRootConfigClasses方法中,在数组中加上此配置的class。

7 初始化spring Security.由于当前使用spring环境,所以不需要多余代码

  如果没有使用spring环境,就需要将WebSecurityConfig(spring Security配置类)传入父类,

  以便获取配合,创建spring context

public class SpringSecurotyApplicationInitializer extends AbstractSecurityWebApplicationInitializer{

  public SpringSecurotyApplicationInitializer (){

    //super(WebSecurityConfig);   //如果没有spring或springMvc就需要加上此行

  }

}

8 当点击登录时候(认证结束)需要跳转到我们自己的页面去,所以需要修改配置servletContext里面的登录地址 即:

  

        Override

        public void addViewControlers(viewControllerRegistry registry){

          registry.addViewController("/").setViewName("redirect:/login");

        }

9  在controller中定义 /login-sucess 的请求。spring Security默认退出的请求是 /logout

10 测试 

11 配置授权 在配置类中配置

    http.authorizeRequests()

    .antMatchers("/r/r1").hasAuthority("a1")

    .antMatchers("/r/r2").hasAuthority("b1")

    .antMatchers("/r/**").authenticated()

    .anyRequest().permitAll()

    .and()

    .formLogin()

    .sucessFowardUrl("/login-sucess");

 

spring Security项目快速搭建

标签:https   logo   结束   初始   protect   version   pid   extend   auth   

原文地址:https://www.cnblogs.com/dengw125792/p/12283901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!