【问题标题】:Authorization using Spring Security使用 Spring Security 进行授权
【发布时间】:2015-07-17 15:03:19
【问题描述】:

我的任务是使用 spring-security 概念登录到应用程序。 我可以使用 Spring 安全性登录,但它仅适用于“ROLE_ADMIN”(因为我在 spring-security.xml 中包含(<user name="Sriram" password="12345" authorities="ROLE_USER" />)。,

所以只有 Sriram 可以登录应用程序。现在我的问题是,我应该使用以下凭据 (<user name="Yogesh" password="12345" authorities="DIRECT_CUSTOMER" />) 登录应用程序。这意味着应该为特定用户进行验证。

  • 案例 1:如果 Sriram 登录 -> 他只能看到他授权的下一页。
  • 案例 2:如果 Yogesh 登录 -> 他只能看到他授权的下一页。

这意味着,它必须在 spring-security.xml 中验证才能登录。

这是我的 spring-security.xml:

<http auto-config="true" access-denied-page="/accessDenied.jsp">
        <intercept-url pattern="/"  access="ROLE_USER"/>
        <form-login login-page="/login" default-target-url="/login"
            authentication-failure-url="/loginfailed" />
        <logout logout-success-url="/logout" />  
    </http>

    <authentication-manager>  
   <authentication-provider>  
     <user-service>  
  <user name="Sriram" password="12345" authorities="ROLE_USER" />  
  <!--  <user name="Vignesh" password="12345" authorities="ROLE_ADMIN" /> -->
<!--   <user name="Yogesh" password="12345" authorities="PARTNER_CUSTOMER" />  -->
     </user-service>  
   </authentication-provider>  
 </authentication-manager>

【问题讨论】:

    标签: java spring security spring-mvc spring-security


    【解决方案1】:

    这里是我找到的答案。 工作的 spring-security.xml 在下面

    <intercept-url pattern="/" access="ROLE_USER" />
    
     <user-service>  
      <user name="Sriram" password="12345" authorities="ROLE_USER" /> 
       <user name="Yogesh" password="12345" authorities="ROLE_USER" /> 
      <user name="Vignesh" password="12345" authorities="ROLE_USER" /> 
       <user name="Shruti" password="12345" authorities="ROLE_USER" /> 
       <user name="Umesh" password="12345" authorities="ROLE_USER" /> 
      </user-service> 
    

    我在 HomeController.java 中控制它,以验证用户将他们发布到他们的授权页面。

    @RequestMapping(value="/", method = RequestMethod.GET)
            public String printWelcome(ModelMap model) {
    
                User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
                String name = user.getUsername();
                System.out.println(name);
                String password=user.getPassword();
                System.out.println(password);
                if(name.equals("Sriram") && (password.equals("12345"))){
                    return "post-login_SoXAdmin";
                }else if(name.equals("Yogesh") && (password.equals("12345"))){
                    return "post-login_directCustomerAdmin";
                }else if(name.equals("Vignesh") && (password.equals("12345"))){
                    return "post-login_PartnerAdmin";
                }else if(name.equals("Shruti") && (password.equals("12345"))){
                    return "post-login_directCustomerUser";
                }else if(name.equals("Umesh") && (password.equals("12345"))){
                    return "post-login_partnerUser";
                }
    
                else{
                    System.out.println("No set of credential found, Please register");
                }
                System.out.println("1" +name);
                System.out.println("SoX_Admin_Page");
                model.addAttribute("username", name);
                model.addAttribute("message", "Spring Security login + database example");
                return "post-login";
            }
    

    【讨论】:

      【解决方案2】:

      是的,验证只会针对 spring-security.xml 中提供的用户进行

      <user-service>  
        <user name="Sriram" password="12345" authorities="ROLE_USER" />  
        <user name="Vignesh" password="12345" authorities="ROLE_ADMIN" />
        <user name="Yogesh" password="12345" authorities="PARTNER_CUSTOMER" />
       </user-service>
      

      您不必注释掉其他用户。在登录时提供凭据,安全框架会将输入的详细信息与&lt;user-service&gt; 标签下的条目进行匹配。

      如果有大量用户,您可以创建一个用户数据库并在&lt;user-service&gt; 标签下从那里获取详细信息。检查this

      您可以设置基于角色的访问控制。每个用户都有自己的角色,然后您可以根据角色映射 ant 样式的 url。请参阅下面的示例代码

      <http auto-config="true">  
        <access-denied-handler error-page="/403page" />  
        <intercept-url pattern="/user**" access="ROLE_USER" />  
        <intercept-url pattern="/admin**" access="ROLE_ADMIN" />  
        <form-login login-page='/login' username-parameter="username"  
         password-parameter="password" default-target-url="/user"  
         authentication-failure-url="/login?authfailed" />  
        <logout logout-success-url="/login?logout" />  
       </http>
      

      具有特定角色的用户将只能访问按角色映射的 url。所以 Vignesh 将无法访问 url /admin** 他将只能访问 /user**

      【讨论】:

      • 谢谢你的朋友 :) 说,Sriram 是一个超级管理员。所以,他只能看到他相关的下一个jsp文件。说,Yogesh 是 MasterAdmin,所以,他只能看到他相关的下一个 jsp 文件。说,Vignesh 是用户,所以他应该只看到他相关的下一个 jsp 页面。我如何在这里实现这个?我想要想法
      • 我必须在 spring-security.xml 中进行哪些更改。我的意思是在这一行
      • 嗨,我在 spring_security 中也遇到了其他问题。我希望你和我联系,伙计。让我们解决它。请提供您的邮件 ID
      • 您可以在此处发布问题。 facebook.com/shivang.sarawagi我的fb id
      • 您好朋友,Login 正在为我工​​作,适用于 Spring-security.xml 中具有硬编码值的不同用户集。现在我必须使用数据库登录。你能帮帮我吗?
      猜你喜欢
      • 2014-03-09
      • 2011-10-12
      • 2011-11-27
      • 2021-10-14
      • 2014-03-06
      • 2017-05-10
      • 2021-03-19
      • 1970-01-01
      • 2013-03-15
      相关资源
      最近更新 更多