java实体类实现Spring Security中的UserDetails出现的问题

问题描述

|ERROR |main |MapperFactoryBean.java:82 |org.mybatis.spring.mapper.MapperFactoryBean |Error while adding the mapper 'interface com.miao.service.mapper.AdminMapper' to configuration.
org.apache.ibatis.reflection.ReflectionException: Illegal overloaded getter method with ambiguous type for property enabled in class class com.miao.service.entity.Admin. This breaks the JavaBeans specification and can cause unpredictable results.
	at org.apache.ibatis.reflection.Reflector.resolveGetterConflicts(Reflector.java:138)
	at org.apache.ibatis.reflection.Reflector.addGetMethods(Reflector.java:108)
	at org.apache.ibatis.reflection.Reflector.<init>(Reflector.java:63)

解决方案

enabled属性遗漏@Getter(AccessLevel.NONE),正确如下:

 @Getter(AccessLevel.NONE)
    private Boolean enabled;

经查阅可以使用特殊AccessLevel.NONE访问级别手动禁用任何字段的getter / setter生成。这使可以重写的行为@Getter,@Setter或@Data对类注解。
希望对你有所帮助!

  • 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、付费专栏及课程。

余额充值