微人事第十天:HttpSecurity配置
程序员文章站
2022-04-30 23:06:32
...
Spring Security可以针对不同的访问路径,来根据登陆的用户判断该用户是否可以访问。实现这个功能就需要HttpSecurity配置来解决。
1.配置类
以下配置类可以看出,这里提供了两个登陆的用户,用户javaboy具有admin权限,用户江南一点雨既有admin又有user权限。
接下来配置类中根据不同的访问权限来设定该用户是否能访问。
例如以下代码就表示以admin开头的路径只能admin权限能访问
.antMatchers("/admin/**").hasRole("admin")
user开头的路径admin和user权限都可以访问
.antMatchers("user/**").hasAnyRole("admin","user")
以下表示剩余路径都可以访问,无论有什么权限
.anyRequest().authenticated()
这个是登陆路径,使用postman需要以下配置
loginProcessingUrl("/doLogin")
完整代码:
package org.javaboy.security.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//告诉系统不加密
@Bean
PasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("javaboy").password("123").roles("admin")
.and()
.withUser("江南一点雨").password("456").roles("user");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("admin")
.antMatchers("user/**").hasAnyRole("admin","user")
.anyRequest().authenticated()
.and()
.formLogin()
.loginProcessingUrl("/doLogin")
.permitAll()
.and()
.csrf().disable();
}
}
2.接口
这里针对不同路径,写出不同返回值
package org.javaboy.security.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello security";
}
@GetMapping("/admin/hello")
public String admin() {
return "hello admin!";
}
@GetMapping("/user/hello")
public String user() {
return "hello user!";
}
}
3.测试
先访问http://localhost:8080/hello界面,用javaboy登陆,返回hello界面
现在访问http://localhost:8080/user/hello和http://localhost:8080/admin/hello都是可行的,因为javaboy具有admin权限,以上两天路径都可以访问。
现在情况缓存,使用“江南一点雨”访问admin前缀的路径就报403了:
HttpSecurity的作用就是定义不同的路径都需要有响应的访问权限。
下一篇: JavaSE 总结