私はSpringが初めてで、Webアプリケーションを作成しています。ユーザーが認証されていないとき、およびspring security.xmlを使用せずに常にログインページにリダイレクトしたいですか?? セッション管理で可能ですか??
1226 次
2 に答える
1
簡単な方法は、「HandlerInterceptorAdapator」を使用することです。
public class CheckUserInterceptor extends HandlerInterceptorAdapter {
@Resource
private UserSession userSession;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws IOException {
if (request.getServletPath().equals("/login.htm")) {
return true;
}
String username = userSession.getUsername();
// If the username has not been set by the login controller
if (username != null) {
return true;
} else {
response.sendRedirect("login.htm");
return false;
}
}
}
この場合、Spring XML ファイルでインターセプターを宣言する必要があります。
<mvc:interceptors>
<bean class="fr.unilim.msi.dad.web.mvc.CheckUserInterceptor" />
</mvc:interceptors>
たとえば、Spring MVC コントローラーがすべてのリクエストを処理するように構成されていない場合、別のアプローチは、サーブレット レベルでフィルターを使用することです。
public class AccessControlFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest) request).getSession(true);
User user = (User) session.getAttribute("user");
if (user == null) {
String urlRoot = ((HttpServletRequest) request).getContextPath();
((HttpServletResponse)response).sendRedirect(urlRoot + "/login.jsp");
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
于 2013-09-19T10:12:47.547 に答える
0
ログインコントローラーで以下のようなことができると思います:
if(isUserAuthenticated())
{
return "home";
}
else
{
session.invalidate();
return "redirect:login";
}
于 2013-09-19T10:02:53.797 に答える