SpringSecurity学习 day2

SpringSecurity学习 day2,第1张

SpringSecurity学习 day2

目录

SpringSecurity Web 权限方案

设置登录系统的账号、密码

未认证请求跳转到登录页

基于角色或权限进行访问控制

hasAuthority 方法

hasAnyAuthority 方法 

基于数据库实现权限认证

自定义 403 页面


SpringSecurity Web 权限方案

设置登录系统的账号、密码

方式一:在 application.properties spring.security.user.name = ezio spring.security.user.password = 1234 方式二:编写类实现接口

@Service("userDetailsService")
public class UserDetailServiceImpl implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        // 权限
        List auth = AuthorityUtils.commaSeparatedStringToAuthorityList("role");

        return new User("ezio",new BCryptPasswordEncoder().encode("123"),auth);
    }
}

@Configuration
public class configtest  extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }



    // 没有配置用户名密码会来这里找到一个userDetailService对象
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }
}

未认证请求跳转到登录页 重写新的config方法,具体写法如下图

基于角色或权限进行访问控制 hasAuthority 方法 如果当前的主体具有指定的权限,则返回 true, 否则返回 false 添加一个控制器

 给用户登录主体赋予权限

hasAnyAuthority 方法  如果当前的主体有任何提供的角色(给定的作为一个逗号分隔的字符串列表)的话,返回 true. hasRole 方法 如果用户具备给定角色就允许访问 , 否则出现 403 。 如果当前主体具有指定的角色,则返回 true 。 基于数据库实现权限认证 查询用户后获得用户的所有角色添加到SimpleGrantedAuthority中,然后add到  list中

@Configuration
public class configtest  extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }


    // 没有配置用户名密码会来这里找到一个userDetailService对象
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {


        http.formLogin()
                .usernameParameter("username")
                .passwordParameter("password")
                .loginPage("/toLogin")  // 设置登陆页面
                .loginProcessingUrl("/login")   // 设置登陆后跳转的路径
                .defaultSuccessUrl("/index").permitAll()
                ;


        http.authorizeRequests()
                .antMatchers("/toLogin",
                        "**/*.css"
                ).permitAll()
                .antMatchers("/level1/**").hasRole("student")
                .antMatchers("/level2/**").hasRole("teacher")
                .antMatchers("/level3/**").hasRole("admin")
                .anyRequest()   // 任何请求
                .authenticated(); //需要认证




    }
}

自定义 403 页面 修改访问配置类 http.exceptionHandling().accessDeniedPage( "/unauth" ); 添加对应控制器
@GetMapping("/unauth")
public String accessDenyPage(){
return "unauth"; }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5685661.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存