gpt4 book ai didi

基于角色的spring安全重定向

转载 作者:IT老高 更新时间:2023-10-28 13:52:48 26 4
gpt4 key购买 nike

我有以下 spring-security.xml 文件:-

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">

<http auto-config="true">
<intercept-url pattern="/Freelancer/**" access="ROLE_FREELANCE" />
<intercept-url pattern="/Client/**" access="ROLE_CLIENT" />
<intercept-url pattern="/Agency/**" access="ROLE_AGENCY" />
<intercept-url pattern="/Manager/**" access="ROLE_MANAGER" />
<intercept-url pattern="/User/**" access="ROLE_USER" />
<form-login default-target-url="/${role}" login-page="/login.jsp" />
<logout logout-url="/logout" logout-success-url="/" />
</http>

<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select user_name,password, enabled from Users where user_name=?"
authorities-by-username-query="select u.user_name, u.role from Users u where u.user_name =?"/>
</authentication-provider>
</authentication-manager>

</beans:beans>

我想要什么,我想将用户重定向到他们的工作区,例如,如果客户端登录,那么他将被重定向到/Client/index.jsp,如果代理登录,他们将被重定向到/Agency/index .jsp.

之前有没有办法访问角色,他会被重定向到他们在spring-security.xml文件中的工作空间。

<form-login default-target-url="/${role}" login-page="/login.jsp" />

我的目录结构类似于角色。

有什么想法。

最佳答案

编写一个 spring Controller ,它将根据用户角色为不同的页面提供服务。编写身份验证成功处理程序类并编写代码以根据角色决定重定向的位置。

首先<form-login />需要更改标签。

<form-login login-page="/landing" authentication-success-handler-ref="authSuccessHandler" />

<beans:bean id="authSuccessHandler" class="com.package.AuthSuccessHandler" />

删除 default-target-url属性。让身份验证处理程序决定将用户重定向到哪里。

Auth 成功处理程序类将如下所示:

public class AuthSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
@Override
protected String determineTargetUrl(HttpServletRequest request, HttpServletResponse response) {
// Get the role of logged in user
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String role = auth.getAuthorities().toString();

String targetUrl = "";
if(role.contains("client")) {
targetUrl = "/client/index";
} else if(role.contains("agency")) {
targetUrl = "/agency/index";
}
return targetUrl;
}
}

这是一个示例代码。根据您的要求更改它。

关于基于角色的spring安全重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com