3

私はSpringが初めてで、Webアプリケーションを作成しています。ユーザーが認証されていないとき、およびspring security.xmlを使用せずに常にログインページにリダイレクトしたいですか?? セッション管理で可能ですか??

4

2 に答える 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 に答える