package com.juick.api.configuration; import com.juick.User; import com.juick.service.UserService; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.WebAuthenticationDetails; import org.springframework.web.filter.GenericFilterBean; import javax.inject.Inject; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Collections; import java.util.List; /** * Created by vitalyster on 27.11.2016. */ public class JuickHashFilter extends GenericFilterBean { @Inject UserService userService; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String hash = request.getParameter("hash"); if (hash != null) { User user = userService.getUserByHash(hash); if (user.getUid() > 0) { List authorities = Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")); UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getName(), null); token.setDetails(new WebAuthenticationDetails((HttpServletRequest) request)); SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(user.getName(), null, authorities)); } } chain.doFilter(request, response); } }