如何实现SpringSecurity的认证和授权
如何实现SpringSecurity的认证和授权针对这个问题,今天小编总结这篇有关SpringSecurity的文章,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。
在pom中的基础上增加spring Security的依赖:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
@Configuration
@ComponentScan(basePackages = "cn.xh"
,excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = Controller.class)})
public class ApplicationConfig {
//在此配置除了Controller的其它bean,比如:数据库链接池、事务管理器、业务bean等。
}
(basePackages=,includeFilters={(type=FilterType.,value=.)})WebConfigWebMvcConfigurer{InternalResourceViewResolverviewResolver(){InternalResourceViewResolverviewResolver=InternalResourceViewResolver();viewResolver.setPrefix();viewResolver.setSuffix();viewResolver;}}
加载spring容器:在init包下定义spring容器的初始化类SpringApplicationInitializer,此类实现WebApplicationInitializer接口,spring容器启动时加载WebApplicationInitializer接口的所有实现类:
SpringApplicationInitializerAbstractAnnotationConfigDispatcherServletInitializer{Class<?>[]getRootConfigClasses(){Class<?>[]{ApplicationConfig.};}Class<?>[]getServletConfigClasses(){Class<?>[]{WebConfig.};}
String[]getServletMappings(){String[]{};}}
认证,Spring Security默认提供认证页面在config包下创建spring Security的配置类WebSecurityConfig,配置的内容包括:用户信息、密码编码器、安全拦截机制:@EnableWebSecurity
WebSecurityConfigWebSecurityConfigurerAdapter{UserDetailsServiceuserDetailsService(){InMemoryUserDetailsManagermanager=InMemoryUserDetailsManager();manager.createUser(User.().password().authorities().build());manager.createUser(User.().password().authorities().build());manager;}PasswordEncoderpasswordEncoder(){NoOpPasswordEncoder.();}configure(HttpSecurityhttp)Exception{http.authorizeRequests().antMatchers().authenticated().anyRequest().permitAll().and().formLogin().successForwardUrl();}}
userDetailsService方法返回一个UserDetailsService对象,spring security从这里获取用户的信息,这里创建了两个用户zhangsan和lisi并设置了他们的密码和权限。
Configure方法配置了/r/**的资源经过认证后才能访问,支持form表单认证,认证成功后跳转到login‐success
加载 WebSecurityConfig:修改SpringApplicationInitializer的getRootConfigClasses()方法,添加WebSecurityConfig.class:
Class<?>[]getRootConfigClasses(){Class<?>[]{ApplicationConfig.,WebSecurityConfig.};}
如果当前环境没有使用spring或springmvc,则需要将WebSecurityConfig传入超类,以获取配置并创建springcontext
public class SpringSecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
public SpringSecurityApplicationInitializer() {
//super(WebSecurityConfig.class);
}
}
在WebConfig.java中添加默认请求根路径跳转到/login,此url为spring security提供:
addViewControllers(ViewControllerRegistryregistry){registry.addViewController().setViewName();}
在LoginController中定义/login-success:LoginController{(value=,produces={})StringloginSuccess(){;}}
授权:在LoginController中添加”/r/r1”或”/r/r2”
在springsecurity配置类:WebSecurityConfig.java中配置授权规则:
.antMatchers("/r/r1").hasAuthority("p1")
.antMatchers().hasAuthority()
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/r/r1").hasAuthority("p1")
.antMatchers("/r/r2").hasAuthority("p2")
.antMatchers("/r/**").authenticated()//所有/r/**的请求必须认证通过
.anyRequest().permitAll()//除了/r/**,其它的请求可以访问
.and()
.formLogin()//允许表单登录
.successForwardUrl("/login-success");//自定义登录成功的页面地址
}
关于SpringSecurity的认证和授权的实现过程就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果喜欢这篇文章,不如把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。