使用 Spring 安全授权
Authorization using Spring Security
我的任务是使用 spring-安全概念登录应用程序。
我可以使用 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>
是的,验证只会对 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>
您不必注释掉其他用户。在登录时提供凭据,安全框架会将输入的详细信息与 <user-service>
标签下的条目进行匹配。
如果有大量用户,您可以创建一个用户数据库并在 <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>
具有特定角色的用户将只能访问按角色映射的 url。所以 Vignesh 将无法访问 url /admin**
他将只能访问 /user**
这是我找到的答案。
工作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 中控制它以验证用户 post 他们到他们的授权页面。
@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";
}
我的任务是使用 spring-安全概念登录应用程序。
我可以使用 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>
是的,验证只会对 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>
您不必注释掉其他用户。在登录时提供凭据,安全框架会将输入的详细信息与 <user-service>
标签下的条目进行匹配。
如果有大量用户,您可以创建一个用户数据库并在 <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>
具有特定角色的用户将只能访问按角色映射的 url。所以 Vignesh 将无法访问 url /admin**
他将只能访问 /user**
这是我找到的答案。 工作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 中控制它以验证用户 post 他们到他们的授权页面。
@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";
}