SpringSecurity中用enum作为角色

这个角色一般就是用户和管理员两种,所以很多情况下没有必要用数据库中的一种类型来作为角色,简单来做的话,就用这个枚举类型

public enum RoleName{
        ADMIN,USER;
        /*ADMIN("ROLE_ADMIN"),USER("ROLE_USER");
        private String value;
//        RoleName(String value){
//            this.value=value;
//        }

        public String getValue() {
            return value;
        }*/

        @Override
        public String toString() {
            return  "ROLE_"+this.name();
        }
    }

这个地方最需要注意的就是名称要加上ROLE_
然后方法上即可直接用


    @ApiOperation("设置为货物已经发出")
    @PreAuthorize("hasRole('ADMIN')")
    @PostMapping("setSent")
    public Object setSent(@NotNull Integer id){
        User u = userSvc.curentUser();
        return  new RespObj(orderRepo.setSent(id));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的示例代码,演示如何重写Java Spring Security的认证: 首先,创建一个类来实现UserDetailsService接口,例如: ``` @Service public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsername(username); if (user == null) { throw new UsernameNotFoundException("User not found with username: " + username); } return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>()); } } ``` 在上面的代码中,我们使用了一个自定义的UserRepository来获取用户信息。如果用户不存在,则将抛出UsernameNotFoundException异常。 接下来,创建一个类来扩展WebSecurityConfigurerAdapter类: ``` @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsServiceImpl userDetailsService; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/", "/home").permitAll().antMatchers("/admin/**") .hasRole("ADMIN").anyRequest().authenticated().and().formLogin().loginPage("/login") .permitAll().and().logout().permitAll(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } ``` 在上面的代码中,我们重写了configure()方法,使用我们的UserDetailsService实现来获取用户信息,并使用BCryptPasswordEncoder来对密码进行加密。 最后,我们需要创建一个User实体类和一个UserRepository来存储用户信息。这些代码可以根据您的需求进行自定义。 ``` @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String username; private String password; private boolean active; @ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER) @CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id")) @Enumerated(EnumType.STRING) private Set<Role> roles; // getters and setters } @Repository public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); } ``` 上面的代码演示了如何使用Java Spring Security重写认证,并使用自定义的UserDetailsService实现来获取用户信息。根据您的需求,您可以根据自己的需要对代码进行自定义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值