使用Spring Security进行授权

时间:2015-05-07 07:17:27

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

我的任务是使用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登录 - &gt;他只能看到他授权的下一页。

这意味着,它必须在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>

2 个答案:

答案 0 :(得分:1)

是的,验证只发生在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>

您不必评论其他用户。登录时提供凭证和&amp;安全框架将输入的详细信息与<user-service>标记下的条目进行匹配。

如果有大量用户,您可以创建用户数据库&amp;从<user-service>标记下的详细信息中获取详细信息。查看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>

具有特定角色的用户只能访问按角色映射的网址。因此,Vignesh无法访问他只能访问/admin**

的网址/user**

答案 1 :(得分:0)

这是我找到的答案。 有效的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";
        }