2015-05-07 41 views
0

我的任务是使用spring-security概念登录到应用程序。 我能够使用Spring安全登录,但它仅适用于“ROLE_ADMIN”(因为我已经包括(<user name="Sriram" password="12345" authorities="ROLE_USER" />)在弹簧security.xml文件,使用Spring Security进行授权

因此,只有斯利拉姆可以登录到应用程序。现在我的问题是的,我应该登录使用以下凭证(<user name="Yogesh" password="12345" authorities="DIRECT_CUSTOMER" />)应用这意味着验证应该发生的特定用户

  • 案例1:如果斯利拉姆日志中 - >他只能看到他的授权下页
  • 案例2:如果Yogesh登录 - >他只能看到他的授权下一页

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

这是我的弹簧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> 

回答

1

是验证会发生仅

<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> 

你没有评论在弹簧security.xml文件中提供的用户淘汰其他用户。仅在登录时提供凭证&安全框架将匹配输入的详细信息与<user-service>标记下的条目。

在大量用户的情况下,您可以创建一个用户数据库&从<user-service>标签获取详细信息。检查this

您可以设置基于角色的访问控制。每个用户将有他自己的角色&,那么你可以映射蚂蚁风格的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**

+0

谢谢你的朋友:)说,Sriram是一个超级管理员。所以,他只能看到他相关的下一个jsp文件。比如说,Yogesh是MasterAdmin,所以他只能看到他相关的下一个jsp文件。说,Vignesh是用户,所以他应该只看到他相关的下一个jsp页面。我如何在这里实现这个?我想要想法 – Yogesh

+0

我在spring-security.xml中做了哪些改变。我的意思是在这一行 Yogesh

+0

我已更新我的回答 – underdog

0

这里我找到了答案。 工作弹簧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"; 
     }