用户类java,通过Java中的类和接口实现不同的用户类型

问题

我对设计模式相当陌生,并且一直在研究这本书,Head First Design Patterns。我需要实现一个有3种用户的系统:会员,主持人,管理员。主持人可以执行会员可以执行的所有操作,还可以添加其他内容,管理员可以执行主持人可以执行的所有操作,还可以添加其他内容。我已经对接口和类如何实现这一点作了基本的描述;没有经验,我需要SO社区关于这种设计的建议 - 无论是太臃肿还是愚蠢,还是需要更正。所以请耐心等待。

可能的解决方法

这里是接口:

public interface AdminBehavior

{

public addUser();

public deleteUser();

}

public interface ModeratorBehavior

{

public blockUser();

public deletePost();

}行为类:

public class AdminBehaviors implements AdminBehavior

{

public addUser() {

...

}

public deleteUser() {

...

}

}

public class NoAdminBehaviors implements AdminBehavior

{

public addUser() {

...//cannot do

}

public deleteUser() {

...//cannot do

}

}

+ Same as above done for Moderators...classes ModeratorBehaviors and NoModeratorBehaviors实际的用户类别:

public class Member

{

protected ModeratorBehavior moderatorBehavior;

protected AdminBehavior adminBehavior;

public Member() {

moderatorBehavior = new NoModeratorBehavior();

adminBehavior = new NoAdminBehavior();

}

public login() {

...

}

public logout() {

...

}

public post() {

...

}

public comment() {

...

}

//Moderator priv'ed actions

public blockUser() {

moderatorBehavior.blockUser();

}

public deletePost() {

moderatorBehavior.deletePost();

}

//Admin priv'ed actions

public addUser() {

adminBehavior.addUser();

}

public deleteUser() {

adminBehavior.deleteUser();

}

}

public class Moderator extends Member

{

public Moderator() {

moderatorBehavior = new ModeratorBehavior();

adminBehavior = new NoAdminBehavior();

}

}

public class Admin extends Moderator ((or Member?))

{

public Admin() {

moderatorBehavior = new ModeratorBehavior();

adminBehavior = new AdminBehavior();

}

}就我个人而言,我觉得这似乎有点过度或混乱......更好的方法来做到这一点?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java ,可以通过使用 Spring Security 框架来实现控制某个登录用户是否拥有访问接口的权限。Spring Security 是 Spring 框架的一个子项目,用于提供身份验证、授权和其他安全功能。 下面是一个简单的示例,演示如何在 Spring Security 实现基于角色的访问控制: 1. 首先需要在 Spring Boot 项目添加 Spring Security 依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 2. 然后在项目创建一个实现了 org.springframework.security.core.userdetails.UserDetailsService 接口,用于从数据库或其他存储检索用户信息,并将其转换为 Spring Security 可用的格式: ```java @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"); } return new org.springframework.security.core.userdetails.User( user.getUsername(), user.getPassword(), AuthorityUtils.createAuthorityList(user.getRoles().toArray(new String[0])) ); } } ``` 3. 在 Spring Security 配置配置访问控制规则,并启用基于角色的访问控制: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/api/admin/**").hasRole("ADMIN") .antMatchers("/api/user/**").hasRole("USER") .anyRequest().authenticated() .and() .formLogin() .and() .logout(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService); } } ``` 在这个示例,我们定义了两个角色:`ADMIN` 和 `USER`。对于 `/api/admin/**` 的请求,只有拥有 `ADMIN` 角色的用户才能访问,而对于 `/api/user/**` 的请求,只有拥有 `USER` 角色的用户才能访问。对于其他请求,只要用户已经登录,就可以访问。 需要注意的是,这个示例使用了基于内存的用户存储方式,实际项目应该根据实际情况配置真正的用户存储方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值