security权限认证demo

目录结构
在这里插入图片描述
部分POM文件如下:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

security配置类,其中注意@EnableGlobalMethodSecurity(prePostEnabled = true)注解。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    private Logger logger = LoggerFactory.getLogger(WebSecurityConfig.class);

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("user").password("user").roles("USER")
                .and()
                .withUser("admin").password("admin").roles("ADMIN")
                .and()
                .passwordEncoder(new MyPasswordEncoder())
        ;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");

        http
                .authorizeRequests().antMatchers("/").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().and()
                .httpBasic();
    }

    @Bean
    @Override
    protected UserDetailsService userDetailsService() {
        return super.userDetailsService();
    }
}

定义一个密码加密类:此处采用明文加密

public class MyPasswordEncoder implements PasswordEncoder {
    @Override
    public String encode(CharSequence rawPassword) {
        return rawPassword.toString();
    }

    @Override
    public boolean matches(CharSequence rawPassword, String encodedPassword) {
        return encodedPassword.equals(rawPassword.toString());
    }
}

controller如下:

@RestController
public class TestController {

    @RequestMapping("/")
    public String index(){
        return "this is index page!";
    }

    @RequestMapping("/user")
    @PreAuthorize("hasRole('USER')")
    public String user(){
        return "this is user page!";
    }

    @RequestMapping("/admin")
    @PreAuthorize("hasRole('ADMIN')")
    public String admin(){
        return "this is admin page!";
    }
}

路径“/”所有用户都能访问,
/user路径只允许USER用户访问
/admin路径只允许ADMIN用户访问。

就这么多,包教不包会

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Security 是一个强大的开源框架,用于提供全面的身份验证(Authentication)和授权(Authorization)解决方案,常用于Java Web应用程序中保护资源访问。它简化了处理用户登录、权限控制以及会话管理等安全相关的任务。 简单授权Demo通常涉及以下几个步骤: 1. 添加依赖:首先在你的Spring Boot项目中添加Spring Security的依赖。如果你使用Maven,可以在pom.xml中添加: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 2. 配置WebSecurityConfigurerAdapter:创建一个`WebSecurityConfigurerAdapter`子类,并覆盖`configure(HttpSecurity http)`方法,设置基本的安全配置,如登录页面、默认登录处理器等: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/login", "/register").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .defaultSuccessUrl("/") .failureUrl("/login?error") .and() .logout() .logoutSuccessUrl("/") .deleteCookies("JSESSIONID"); } @Bean public UserDetailsService userDetailsServiceBean() { // 注册用户服务,这里是示例,实际应用中可能需要从数据库获取 return new InMemoryUserDetailsManager(Arrays.asList( new User("user", "password", AuthorityUtils.createAuthorityList("USER")) )); } } ``` 在这个例子中,我们允许"/login"和"/register"路径无需身份验证,所有其他请求都需要认证。登录失败后会被重定向到"/login?error"。 3. 用户认证:定义一个`UserDetailsService`实现,它负责从数据库或内存中加载用户信息进行验证。这里使用的是内存中的简单例子。 4. 创建Controller和视图:定义一个控制器,处理登录请求并渲染登录页面。例如: ```java @Controller public class LoginController { @GetMapping("/login") public String loginPage() { return "login"; } @PostMapping("/login") public String handleLogin(@RequestParam String username, @RequestParam String password, Model model) { // 这里只是一个简单的示例,实际应用中应检查用户名密码是否正确 if ("user".equals(username) && "password".equals(password)) { return "redirect:/"; } else { model.addAttribute("error", "Invalid credentials"); return "login"; } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值