gpt4 book ai didi

spring - 如何使用 Spring MVC 3.1 获取引用 URL

转载 作者:行者123 更新时间:2023-12-01 14:36:08 25 4
gpt4 key购买 nike

我正在建立一个有 2 个页面的网站。食谱列表页面、食谱详细信息页面和登录页面。用户可以通过单击菜谱列表页面或菜谱详细信息页面上的登录按钮来登录网站。当用户单击登录按钮时,用户将被带到登录页面。如果用户单击食谱详细信息页面上的登录按钮,我想将用户再次重定向回食谱详细信息页面,或者如果他们单击食谱列表页面上的登录按钮,我想将用户重定向回食谱列表页面。

我在 Controller 类中编写了这个方法。每当用户登录网站时,都会调用此方法。我将引用 URL 存储到 session 中。将此 URL 保存到 session 中的目的是跟踪用户单击登录按钮的页面。并在我编写的身份验证处理程序中将用户重定向到该页面。

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String openLoginPage(Model uiModel, HttpServletRequest request) {



String referrer = request.getHeader("Referer");

request.getSession().setAttribute("url_prior_login", referrer);

return RECIPE_LOGIN_PAGE;
}

我还创建了一个名为 SuccessHandler 的身份验证处理程序类。

public class SuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

/*
* (non-Javadoc)
*
* @see org.springframework.security.web.authentication.
* SavedRequestAwareAuthenticationSuccessHandler
* #onAuthenticationSuccess(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse,
* org.springframework.security.core.Authentication)
*/
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws ServletException, IOException {

String url = (String) request.getSession().getAttribute("url_prior_login");

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal != null && principal instanceof RecipeUser) {
request.getSession().setAttribute("RecipeUser", (RecipeUser) principal);
}


getRedirectStrategy().sendRedirect(request, response, url);
}

}

此类会在用户登录网站时将用户重定向到菜谱列表页面或菜谱详细信息页面。我在 security-context.xml 文件中注册了这个类:

<http use-expressions="true" auto-config="false"  entry-point-ref="authenticationEntryPoint">
<intercept-url pattern="/login" access="permitAll" />
<form-login login-page="/login" authentication-failure-url="/loginfail"
default-target-url="/login"
authentication-success-handler-ref="successHandler" />
<logout logout-success-url="/" />
</http>

<authentication-manager alias="authManager">
<authentication-provider user-service-ref='myUserDetailsService' />
</authentication-manager>

<beans:bean id="myUserDetailsService" class="com.safe.stack.service.security.UserService">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>

<beans:bean id="successHandler"
class="com.safe.stack.service.security.SuccessHandler" />


<beans:bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<beans:property name="loginFormUrl" value="/login"/>
</beans:bean>

这是实现我想要实现的目标的好方法吗?有一个更好的方法吗 ?我找不到有关如何使用 Spring MVC 执行此操作的任何示例。

谢谢

最佳答案

这是我在 Spring 3.1.4 中的做法

public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {

// Supplies the default target Url that will be used if
// no saved request is found in the session
setDefaultTargetUrl("/member/dashboard");
super.onAuthenticationSuccess(request, response, authentication);
}

扩展 SavedRequestAwareAuthenticationSuccessHandler 是正确的,因为重定向是自动完成的。

关于spring - 如何使用 Spring MVC 3.1 获取引用 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14079093/

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