Hej.
Olałem domyślny system uwierzytelniania w jee i chciałbym napisać coś własnego. Niestety jee oferuje nam dość fajny system autoryzacji z którego chciałbym skorzystać. Czy da się jakoś to połączyć?
Napisałem mały filtr który powinien zmienić uprawnienia niestety nie działa :/
import java.io.IOException;
import java.security.*;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class SecurityFilter implements Filter {
@Override
public void doFilter(final ServletRequest request, final ServletResponse response,
final FilterChain chain)
throws IOException, ServletException {
// specify a subset of permission which need to be enabled
Permissions subset = new Permissions();
subset.add(new RuntimePermission("user-role"));
ProtectionDomain pd = new ProtectionDomain(null, subset);
AccessControlContext context = new AccessControlContext(new ProtectionDomain[]{pd});
RunBody runBody = new RunBody(request, response, chain);
try {
AccessController.doPrivileged(runBody, context);
} catch (PrivilegedActionException ex) {
//Logger.getLogger(NewFilter.class.getName()).log(Level.SEVERE, null, ex);
throw new ServletException(ex);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
class RunBody implements PrivilegedExceptionAction<Object> {
ServletRequest request;
ServletResponse response;
FilterChain chain;
public RunBody(ServletRequest request, ServletResponse response, FilterChain chain) {
this.request = request;
this.response = response;
this.chain = chain;
}
@Override
public Object run() throws Exception {
HttpServletRequest req = (HttpServletRequest) request;
response.getWriter().write( req.isUserInRole("user-role")?"true":"false" );
AccessController.checkPermission(new RuntimePermission("user-role"));
chain.doFilter(request, response);
return null;
}
}
}
Kod wyświetla false i rzuca wyjątkiem. Nie zabardzo wiem jak to obejść.
Ktoś wie czy można coś z tym zrobić?