我正在建立一个有 2 页的网站。食谱列表页面、食谱详细信息页面和登录页面。用户可以通过单击食谱列表页面或食谱详细信息页面上的登录按钮来登录网站。当用户点击登录按钮时,用户将被带到登录页面。如果用户单击配方详细信息页面中的登录按钮,我想再次将用户重定向回配方详细信息页面,或者如果他们单击配方列表页面中的登录按钮,我想将用户重定向回配方列表页面。
我在 Controller 类中编写了这个方法。每当用户登录网站时都会调用此方法。我将引用 URL 存储到会话中。将此 URL 保存到会话中的目的是跟踪用户单击登录按钮的页面。并且还将用户重定向到我编写的身份验证处理程序中的该页面。
@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 的示例。
谢谢