@RequestMapping(method = RequestMethod.GET)
public String home(Model model)
{
- boolean authorized = true;
- try
- {
- authorized = facebook.isAuthorized();
- }
- catch (NullPointerException e)
- {
- LOG.debug("NPE while acessing Facebook: {}", e);
- authorized = false;
- }
- if (!authorized)
- {
- LOG.info("no authorized user, redirecting to /signin.html");
- return "redirect:/signin.html";
- }
-
User user = facebook.userOperations().getUserProfile();
LOG.info("authorized user {}, id: {}", user.getName(), user.getId());
model.addAttribute("user", user);
package de.juplo.yourshouter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.social.UserIdSource;
+import org.springframework.util.Assert;
/**
*/
public class SecurityContextUserIdSource implements UserIdSource
{
- private final static Logger LOG =
- LoggerFactory.getLogger(SecurityContextUserIdSource.class);
-
-
/**
* Retrieves the ID of the current user from the {@link SecurityContext}.
+ * If no ID is found, an exception is thrown.
*
- * @return
- * The ID of the current user, or the special ID <code>anonymous</code>,
- * if no current user is present.
+ * @return The ID of the current user
+ * @throws IllegalStateException, if no current user is found.
*/
@Override
public String getUserId()
{
- String user = SecurityContext.getCurrentUser();
- if (user != null)
- {
- LOG.debug("found user \"{}\" in the security-context", user);
- }
- else
- {
- LOG.info("found no user in the security-context, using \"anonymous\"");
- user = "anonymous";
- }
- return user;
+ Assert.state(SecurityContext.userSignedIn(), "No user signed in!");
+ return SecurityContext.getCurrentUser();
}
}
package de.juplo.yourshouter;
+import java.io.IOException;
import java.util.Collections;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
* @return
* Always <code>true</code>, to indicate, that the intercepted request
* should be handled normally.
+ * @throws java.io.IOException
+ * if something wents wrong, while sending the redirect to the
+ * sign-in-page.
*/
@Override
public boolean preHandle(
HttpServletResponse response,
Object handler
)
+ throws
+ IOException
{
+ if (request.getServletPath().startsWith("/signin"))
+ return true;
+
String user = UserCookieGenerator.INSTANCE.readCookieValue(request);
if (user != null)
{
UserCookieGenerator.INSTANCE.removeCookie(response);
}
}
- return true;
+
+ response.sendRedirect("/signin.html");
+ return false;
}
/**