当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Security 3中设置用户角色?

澹台季萌
2023-03-14

我正在研究JAVA EE技术,学习JSF-Spring-Hibernate与...我正在尝试使用不同的用户角色做web应用程序。现在,我只有一个用户角色role_user。我不能改变那个角色。我试着调试mod来理解我们是如何设置这个角色的,但我不明白它发生在哪里。

所以,我的主要问题是我不能在我的应用程序中创建任何其他角色。如果我没有在我的流中使用 (我使用的是spring web-flow),那么每个人都可以访问该页面。如果我只执行role_user。但我想创建名为ROLE_ADMIN的新角色,并且只允许ROLE_ADMIN访问该页面。

注意:我没有在这里添加所有的文件,因为对我来说只是添加相关的类和文件。如果你需要更多的信息,请告诉我。

<?xml version="1.0" encoding="UTF-8"?>

<security:http auto-config="true">
    <security:form-login login-page="/app/main"
        default-target-url="/app/account" />
    <security:logout logout-url="/app/logout"
        logout-success-url="/app/main" />
</security:http>

<security:authentication-manager>
    <security:authentication-provider
        user-service-ref="userServiceImp">
        <security:password-encoder hash="md5" />
    </security:authentication-provider>
</security:authentication-manager>

<bean id="daoAuthenticationProvider"
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <property name="userDetailsService" ref="userServiceImp" />
    <property name="hideUserNotFoundExceptions" value="false" />
</bean>

<bean id="authenticationManager"
    class="org.springframework.security.authentication.ProviderManager">
    <constructor-arg>
        <ref bean="daoAuthenticationProvider" />
    </constructor-arg>
</bean>

这是我对用户进行身份验证的UserAuthenticationProviderServiceImp类。

 public boolean processUserAuthentication(Users user) {

        try {
                Authentication request = new UsernamePasswordAuthenticationToken(user.getUserName(), user.getPassword());
                Authentication result = authenticationManager.authenticate(request);
                SecurityContextHolder.getContext().setAuthentication(result);

                return true;
        } catch(AuthenticationException e) {
                FacesContext.getCurrentInstance().addMessage(null, 
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "Sorry!"));

                return false;
        }
}

我发现这个函数,即我的服务类,是在ProcessUserAuthentication中调用的,然后我认为这是设置角色的函数。

public UserDetails loadUserByUsername(String userName)
        throws UsernameNotFoundException {

    Users user = userDao.loadUserByUserName(userName);

    if (user == null) {
        throw new UsernameNotFoundException(String.format(
                getMessageBundle().getString("badCredentials"), userName));
    }

    Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
    authorities.add(new SimpleGrantedAuthority("USER_ROLE"));
    User userDetails = new User(user.getUserName(), user.getPassword(),
            authorities);
    return userDetails;
}

共有1个答案

丁韬
2023-03-14
authorities.add(loadUserAuthorities(user.getUsername()));

protected List<GrantedAuthority> loadUserAuthorities(String username) {
    List<GrantedAuthority> authorities = null;
    Object[] params = { username };
    authorities = authoritiesByUsernameMapping.execute(params); // Query to get Authorities
    return authorities;      
}
 类似资料:
  • 目前,我正在用Java开发一个基于Spring Boot的web应用程序。我正在尝试为我的应用程序创建工人注册。老实说,这是我第一次使用这样的应用程序,我真的不知道如何在注册时授予用户角色。我看了几个教程,但并没有人演示如何在向数据库添加新用户时授予角色。 在我的数据库中,我有如下表Worker和Role。 在注册表中,我有两个复选框:worker和admin,我想根据所选的复选框授予权限。 这就

  • 本文向大家介绍在MongoDB中新建用户并设置角色,包括了在MongoDB中新建用户并设置角色的使用技巧和注意事项,需要的朋友参考一下 为此,请使用userAdminAnyDatabase,因为它会授予所有权限,例如admin。以下是语法- 让我们实现以上语法以创建用户角色。以下是创建具有角色“ userAdminAnyDatabase”的用户的查询- 这将产生以下输出-

  • 当我使用安全性登录时,无法使用方法。我认为用户的角色没有设定。

  • 您可通过点击侧边栏角色栏进入角色管理页面。 添加角色 除系统提供角色之外,您可根据企业实际情况自定义角色。点击“添加角色”进行设置:•输入角色名称(必填) •输入角色说明(选填) •勾选角色功能权限(审批、单据为默认权限,不可删除) •勾选角色管理范围(项目或部门) 修改系统角色 主管需要您在部门模块或项目模块设置部门主管或项目主管。具体请详见【通过部门、项目管理员工】

  • 我有一个奇怪的小问题:如何设置截击中的用户代理? 我需要一些网站的完整版本(桌面版),而不是手机版。 我试图将变量userAgent从“volley/0”改为“Mozilla/5.0(X11;Linux i686)AppleWebKit/537.36(KHTML,比如Gecko)Chrome/27.0.1453.93 Safari/537.36”(我的Chrome)。没什么区别。 有什么建议吗?